从一个查询中选择id并在另一个查询中使用它

时间:2015-12-30 15:12:23

标签: php mysql

我有这个代码。在第一个查询中,我希望它选择一个pid。然后我想以某种方式在第二个查询中使用选定的pid作为WHERE。这不起作用,但我想让它在这个(相同的)页面上工作。我在其他论坛上看过这个,但我仍然没有解决它。某处可能是一个小错误。

xmlTag().withLocalName(string().matches("<none>"))

5 个答案:

答案 0 :(得分:3)

关于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 );
    }
?>

答案 1 :(得分:1)

$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 docs复制的。

编辑:: http://php.net/manual/en/mysqli-result.fetch-row.php 用于fetch_row的Mysqli文档。

答案 2 :(得分:1)

首先,你不应该混合使用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);

另外,你真的应该学会使用准备好的陈述,因为它们更安全。

答案 3 :(得分:0)

我相信你必须改变这段代码:

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

为:

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

不要混用mysql和mysqli命令,你可以轻易搞砸你的代码。

答案 4 :(得分:0)

这看起来很臭

$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);