我有这个代码。在第一个查询中,我希望它选择一个pid。然后我想以某种方式在第二个查询中使用选定的pid作为WHERE。这不起作用,但我想让它在这个(相同的)页面上工作。我在其他论坛上看过这个,但我仍然没有解决它。某处可能是一个小错误。
xmlTag().withLocalName(string().matches("<none>"))
答案 0 :(得分:3)
关于sql,也许这可能有效
SELECT `pid`, `project_name`, `image`, `image_type`
FROM `project` WHERE `pid` = (
SELECT `pid` FROM `users` WHERE `id`='$loggedInUserId'
);
原始代码混合了mysql
和mysqli
个函数,并进一步混合了Object Orientated
和Procedural
方法调用。虽然这不会导致错误,但这样做是不好的做法。下面是一个程序风格 - 它没有经过测试,但它将两个查询合并为一个应该有效的(着名的最后一个单词)
旁注:这就是说 - 使用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);