预备语句查询不返回任何结果

时间:2014-01-21 23:10:42

标签: php mysql sql

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

4 个答案:

答案 0 :(得分:2)

  1. 您错过了FROM条款
  2. 如果您选中了$mysqli->error,那么您自己就知道了
  3. WHERE id = 50,51,52不是有效的mysql语法
  4. 您需要使用IN运算符
  5. 使用预先准备的语句,它将被评估为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), '?')) . ')';