我需要将一些数据库行id发送到另一个页面,然后使用它们来加载行和进程。我使用了一个工作正常的会话变量。
$_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);
收到错误:
警告:mysqli_stmt :: bind_param():变量数不匹配 准备语句中的参数数量 第39行的C:\ xampp \ htdocs \ ppa \ add_sales.php
#####编辑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);
答案 0 :(得分:2)
FROM
条款$mysqli->error
,那么您自己就知道了WHERE id = 50,51,52
不是有效的mysql语法IN
运算符WHERE id = '50,51,52'
。就是这样 - 将id
列与单个字符串进行比较。答案 1 :(得分:1)
SELECT id,jpg WHERE id = 50,51,52
它的错误陈述。
1)你不能在哪里写params。
使用where id = 50 or id = 51 or id = 52
2)你错过了来自FROM Table
这是正确的:
SELECT id,jpg FROM table WHERE id = 50 or id = 51 or id = 52
答案 2 :(得分:0)
您可以尝试以下方法:
SELECT id,jpg FROM tablename WHERE id IN (50,51,52);
答案 3 :(得分:0)
您需要单独绑定它们:
WHERE id IN (?, ?, ?)
并绑定:
$stmt->bind_param("i", 50);
$stmt->bind_param("i", 51);
$stmt->bind_param("i", 52);
您需要使用explode()
和循环来正确执行此操作。您还需要使用implode生成正确数量的问号:
$questionMarks = '(' . implode(',', array_fill(0, count($resultOfSplit), '?')) . ')';