为什么执行SELECT查询后,我的PDO $ stmt-> bind_result()函数调用挂起?

时间:2018-08-26 01:33:45

标签: php pdo

我有一个MySQL数据库,其中的表“ Test”具有一列“ TestData”。对于具有TestData的以下值的三个记录:“这是值1”,“这里是另一个字符串”和 “第三只为了好运”。

我编写了以下PHP代码来检索记录。

<?php

try {
    $hostname = "redacted";
    $username = "redacted";
    $password = "redacted";
    $database = "redacted";

    $conn = new PDO("mysql: host=$hostname; dbname=$database", $username, $password);

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT TestData FROM Test";

    $stmt = $conn->prepare($sql);

    $stmt->execute();
}
catch(PDOException $e)
{
    $finalResult = $finalResult . "," . $e->getMessage();
}

echo "you are here (" . $stmt->rowCount() . ")<br>";

if ($stmt->rowCount() > 0) {

    echo "found (" . $stmt->rowCount() . ")<br>";

    $stmt->bind_result($td);

    echo "bind successful<br>";

    while ($stmt->fetch()) {
        echo "testdata (" . $td . ")<br>";
    }
} else {
    echo "nothing found<br>";
}

?>

我收到的结果是

您在这里(3)

找到(3)

PHP脚本永远不会到达“ echo'bind success
'”语句。 “ $ stmt-> bind_result($ td);”语句挂起。

鉴于rowCount = 3,该查询似乎可以正常工作。我使用了基本上相同的结构来执行可以正常工作的INSERTS。

我在做什么问题?谢谢。

2 个答案:

答案 0 :(得分:0)

我将代码更改为以下代码,并且可以正常工作。

<?php

    $hostname = "redacted";
    $username = "redacted";
    $password = "redacted";
    $database = "redacted";

    $conn = new mysqli($hostname, $username, $password, $database);
    if ($conn->connect_error) {
        fwrite(STDERR, "Connection failed: " . $conn->connect_error . "\n");
        exit(1);
    }

    $sql = "SELECT TestData FROM Test WHERE ?";

    $stmt = $conn->stmt_init();

    if(!$stmt->prepare($sql)) {
        print "Failed to prepare statement\n";
    } else {
        $stmt->bind_param("s", $condition);
    }

    $condition = "1 = 1";

    $stmt->execute();
    $result = $stmt->get_result();
    while ($row = $result->fetch_array(MYSQLI_NUM)) {
        foreach ($row as $r) {    
            echo "testdata(" . $r . ")<br>";
        }
    }
?>

不再为我混合PDO和MySQLi。谢谢您的帮助。抱歉给您带来不便。

答案 1 :(得分:0)

如果您只是想使用php pdo从数据库中获取项目,则需要存储结果。

$results = $stmt->fetch(); //will get one row

$results = $stmt->fetchAll(); //will take all results and store in an array

希望这会有所帮助。