mysqli返回所有相同的记录

时间:2013-02-20 18:57:30

标签: php mysqli

以下代码应该从表中检索所有记录并将它们返回到数组。它确实返回正确的记录数,但所有记录都是相同的。有没有人知道问题是什么?

function list_book() {
$username = "user";
$password = "pwd";
$conn =  mysqli_connect('localhost', $username, $password, 'db') or die('Could Not Connect' . mysql_error());
$stmt = $conn->stmt_init();
if ($stmt->prepare("SELECT * FROM book")) {
    $stmt->bind_result($r['book_id'], $r['book_title']);
    if (!$stmt->execute()) {
        echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
        exit();
    }
    while($stmt->fetch()){
        $book[] = $r;
    }
    print_r($book);     //**** added purposely to examine the content of the array
    exit();

    return $book;
}
mysqli_close($conn);

}

5 个答案:

答案 0 :(得分:2)

参数必须在执行语句后绑定...请参阅http://www.php.net/manual/en/mysqli-stmt.bind-result.php

另外,我不知道你是否可以绑定到数组元素......

在你的if语句中试试这个......

if (!$stmt->execute()) {
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    exit();
}

$stmt->bind_result($book_id, $book_title);

while($stmt->fetch()){
    $book[] = array($book_id, $book_title);
}

答案 1 :(得分:0)

不要使用丑陋的mysqli 使用一些可以完成两行所有工作的助手类,luke safemysql

function list_book() {
    global $db; // NEVER connect in the function, connect once and then use ONE connection
    return $db->getAll("SELECT * FROM book");
}

或者至少使用PDO,如果你想坚持使用原始API 但忘了mysqli,它无法使用。

答案 2 :(得分:0)

问题是,只有一个数组$r。每次调用$stmt->fetch()时,都会覆盖此数组的参数,并将其再次附加到$book - 数组。

一种可能的解决方案:(不一定是最好的解决方案)

$stmt->bind_result($book_id, $book_title);
...
while($stmt->fetch()){
    $book[] = array($book_id, $book_title);
}

答案 3 :(得分:0)

我想通过在while循环中添加以下内容来解决问题。感谢大家的贡献! :)

foreach( $r as $key=>$value ) {
    $row_tmb[ $key ] = $value;
}

$book[] = $row_tmb;

答案 4 :(得分:-1)

表格是否有重复的记录?

如果是这样,稍加修改的SQL可能有所帮助,例如: SELECT DISTINCT book_id, book_title FROM book

而不是明确的'绑定',也许$r = $stmt - > fetch_assoc()

然后你可以收集你的数组的$r['book_title'](或任何字段)。