我需要将一些数据库行 ID 发送到另一个页面,然后使用它们的 ID 来加载行和处理。我使用了一个工作正常的 session 变量。
$_SESSION['tmp'] = "50,51,52";
if ($stmt = $mysqli->prepare("SELECT id,jpg WHERE id = ?")) {
$stmt->bind_param("s",$_SESSION['tmp']);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($result_id,$result_jpg);
if ($stmt->num_rows > 0) {
while($stmt->fetch()) {
$image = array($result_id => $result_jpg);
print_r($image."<br />");
}
} else {
echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error;
}
}
查询将是
SELECT id,jpg WHERE id = 50,51,52
应该返回所有这些行,但是根本没有显示任何内容,没有错误或任何内容。有任何想法吗?
######编辑#####
更新了我的代码:
//Generate the query
$query = "SELECT id,jpg FROM images WHERE id IN (?";
for ($i=1; count($_SESSION['tmp']) > $i; $i++) {
$query = $query.",?";
} $query = $query.")";
if ($stmt = $mysqli->prepare($query)) {
for ($i=1; count($_SESSION['tmp']) > $i; $i++) {
$b = $_SESSION['tmp'][$i]-1;
$stmt->bind_param("s",$b);
}
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($result_id,$result_jpg);
if ($stmt->num_rows > 0) {
while($stmt->fetch()) {
$image = array($result_id => $result_jpg);
print_r($image);
}
} else {
echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error;
}
}
似乎无法循环
bind_param("s",50);
出现错误:
Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in C:\xampp\htdocs\ppa\add_sales.php on line 39
#####编辑 2#####
改变了我处理这个问题的方式,效果很好。
$image = array();
foreach($_SESSION['tmp'] as $x) {
if ($stmt = $mysqli->prepare("SELECT id,jpg FROM images WHERE id = ?")) {
$stmt->bind_param("s",$x);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($result_id,$result_jpg);
if ($stmt->num_rows > 0) {
while($stmt->fetch()) {
$image[$result_id] = $result_jpg;
}
} else {
echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error;
}
}
}
print_r($image);
最佳答案
- 你错过了
FROM
子句 - 如果你勾选了
$mysqli->error
你自己就会知道的 WHERE id = 50,51,52
不是有效的 mysql 语法- 您需要改用
IN
运算符 - 对于准备好的语句,它将被评估为
WHERE id = '50,51,52'
。就是这样 -id
列与单个字符串进行比较。
关于php - 预编译语句查询不返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21270998/