php - 预编译语句查询不返回任何结果

标签 php mysql sql

我需要将一些数据库行 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);

最佳答案

  1. 你错过了 FROM 子句
  2. 如果你勾选了$mysqli->error你自己就会知道的
  3. WHERE id = 50,51,52 不是有效的 mysql 语法
  4. 您需要改用 IN 运算符
  5. 对于准备好的语句,它将被评估为 WHERE id = '50,51,52'。就是这样 - id 列与单个字符串进行比较。

关于php - 预编译语句查询不返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21270998/

相关文章:

java - Hibernate:通过单个连接表引用多个表

PHP/mySQL - 仅检索唯一元值的查询

iphone - sqlite 与 mysql iPhone 有多相似

MySQL整数默认值0

PHP:类与实例变量

php - fsockopen 返回服务器错误 (0)

android - Mysql在Android应用中没有得到完美的结果

mysql - pyspark mysql jdbc load 调用o23.load时出错没有合适的驱动

php - 你能在 laravel 中创建一个范围来调用其他各种范围吗?

php - 如何使用 PHP PDO 将未知数量的字段作为行插入