Почему мой вызов PDO $ stmt-> bind_result () зависает после выполнения запроса SELECT? - PullRequest
0 голосов
/ 26 августа 2018

У меня есть база данных 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. Я использовал практически ту же структуру для выполнения ВСТАВКИ, которая работает должным образом.

Что не так с тем, что я делаю? Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Если вы просто пытаетесь получить элементы из базы данных с помощью php pdo, вам нужно сохранить результаты.

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

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

надеюсь, это поможет.

0 голосов
/ 26 августа 2018

Я изменил свой код на следующий, и он работает.

<?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 для меня. Спасибо за помощь. Приносим извинения за неудобства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...