从一个查询中选择id,然后在另一个中使用它


Select id from one query and use it in another

我有这段代码。在第一个查询中,我希望它选择一个pid。然后,我想以某种方式在第二个查询中使用所选的pid作为WHERE。这不起作用,但我希望它在这个(同一)页面上起作用。我在其他论坛上读到过这件事,但我仍然没有修复。可能是某个地方的小错误。

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
}
$loggedInUserId = $_SESSION['user_id'];
$resu = mysql_query("SELECT pid FROM users WHERE id='$loggedInUserId';");
$ro = mysql_fetch_row($resu);
$sql= "SELECT pid, project_name, image, image_type FROM project WHERE pid ='". $row["pid"]. "';";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_array()) {
    
        //$type= "Content-type:".$row['image_type'];
    //header ($type);
    echo "<form action='respodents.php' method='post'><button name='submit' id='projectbutton'>
            <div> 
                <img src=pic.php?pid=".$row['pid']." width=100px height=100px/>"." <div  id='project_name'>".$row['project_name']."</div>"."
       
            <input type='hidden' name='pid' value='".$row['pid']."'>
            <input type='hidden' name='project_name' value='".$row['project_name']."'>
            
            </div>
       </button></form>";
    }}
mysqli_close($mysqli);
?>

关于sql,也许这可能适用于

SELECT `pid`, `project_name`, `image`, `image_type` 
    FROM `project` WHERE `pid` = ( 
        SELECT `pid` FROM `users` WHERE `id`='$loggedInUserId'
    );

原始代码混合了mysqlmysqli函数,并进一步混合了Object OrientatedProcedural方法调用。虽然这不一定会导致错误,但这样做是不好的做法

旁注:也就是说,有了mysqli,您可以利用prepared statements,这有助于减轻sql注入的威胁-它的精简和使用非常简单-因此,与其在sql中嵌入变量,不如使用占位符,然后将变量绑定到它。

<?php
    ini_set('display_errors',1);
    error_reporting(E_ALL);
    /* db connection? */

    if( mysqli_connect_errno() ) echo mysqli_connect_error();
    else {
        $loggedInUserId = $_SESSION['user_id'];
        $sql="select `pid`, `project_name`, `image`, `image_type` 
            from `project` 
            where `pid` = ( 
                select `pid` from `users` where `id`='$loggedinuserid'
            );";
        $resu=mysqli_query( $mysqli, $sql );
        if( $resu ){
            $ro = mysqli_fetch_row( $resu );
            while( $row=mysqli_fetch_object( $resu ) ){
                echo "<form action='respodents.php' method='post'>
                        <button name='submit' id='projectbutton'><!-- you cannot re-use IDs, they MUST be unique! -->
                            <div> 
                                <img src'=pic.php?pid=".$row->pid."' width='100px' height='100px'/>
                                <div id='project_name'>".$row->project_name."</div><!-- you cannot re-use IDs, they MUST be unique! -->
                                <input type='hidden' name='pid' value='".$row->pid."'/>
                                <input type='hidden' name='project_name' value='".$row->project_name."'/>
                            </div>
                        </button>
                   </form>";
            }
        }
        mysqli_close( $mysqli );
    }
?>

首先,您不应该混合使用mysql和mysqli。让我们使用mysqli,因为mysql已被弃用。

我假设您不需要它只出现在一个查询中,因为您从未指定过。

$result = mysqli_query("SELECT pid FROM users WHERE id='$loggedInUserId';");
while($row = mysqli_fetch_row($result))
{
    $pid = $row['pid'];
}
$sql= "SELECT pid, project_name, image, image_type FROM project WHERE pid ='". $pid. "';";
$result = $mysqli->query($sql);

此外,你真的应该学会使用事先准备好的语句,因为它们更安全。

$ro = mysql_fetch_row($resu);
$sql= "SELECT pid, project_name, image, image_type FROM project WHERE pid ='".      
$row["pid"]. "';";

$ro = mysql_fetch_row($resu);应该拼写为$row而不是$ro。您在SQL语句中调用的变量中没有任何内容。

此外,您的SQL语句在方面没有多大意义

$row["pid"], 

您正在使用mysql_fetch_row访问一个数字数组(http://php.net/manual/en/function.mysql-fetch-row.php)。

如果有什么不同的话,您需要执行mysql_fetch_array或mysql_fetch _assoc,以获取一个可以访问"pid"数据语句的关联数组。使用fetch_row的方式是数字访问,即

$result = mysql_query("SELECT id,email FROM people WHERE id = '42'"); 
$row = mysql_fetch_row($result);
echo $row[0]; // 42
echo $row[1]; // the email value

上面的内容是直接从php mysql_fetch_row文档中复制的。

编辑::http://php.net/manual/en/mysqli-result.fetch-row.phpMysqli Docs for fetch_row。

我认为您必须更改此代码:

$resu = mysql_query("SELECT pid FROM users WHERE id='$loggedInUserId';");

至:

$resu = mysql_query("SELECT pid FROM users WHERE id='".$loggedInUserId."'");

不要混合使用mysql和mysqli命令,这样会很容易把代码搞砸。

这看起来很臭

$ro = mysql_fetch_row($resu);
$sql= "SELECT pid, project_name, image, image_type FROM project WHERE pid ='". $row["pid"]. "';";

$ro = mysql_fetch_row($resu);更改为$row = mysql_fetch_row($resu);

相关文章: