PHP PDO подготовленный запрос не будет возвращать результаты из цикла for - PullRequest
1 голос
/ 28 июня 2009

У меня есть следующий код:

$link = new PDO("mysql:dbname=$databasename;host=127.0.0.1",$username,$password);
$query = $link->prepare("SELECT * FROM index WHERE sbeid=:idvar");
for($j = 1; $j < count($array); $j++)
{
    if($array[$j][16] == "TRUE" || $array[$j][16] == "FALSE")
    {
        $paramforquery = $array[$j][25];
        $query->bindParam(":idvar",$paramforquery);
        $query->execute();
        $result = $query->fetchAll();
        //do things with the $result
        $query->closeCursor();
    }
    //else if, do stuff
}
$link = null;

$array - это большой массив, состоящий из входных данных из файла CSV, который успешно загружается с помощью fopen().

Моя проблема в следующем: запрос просто не работает. Я точно знаю (запустил запрос непосредственно на сервере с некоторыми примерами значений из файла), что данные находятся в базе данных, но когда я var_dump $result s каждый раз, когда выполняется цикл for, я просто получите пустой массив.

Что я делаю не так?

ТИА.

Ответы [ 2 ]

1 голос
/ 29 июня 2009

Увеличьте сообщения об ошибках - стандартный совет.
Установите режим ошибки объекта pdo на ERRMODE_EXCEPTION - вы вряд ли сможете пропустить ошибку таким образом.
Используйте отладчик или добавьте отладочный вывод в ваш скрипт - настоящий отладчик намного лучше.

<code><?php
error_reporting(E_ALL);
ini_set('display_errors', 1);  
$array = foo();
echo '<pre>Debug: |array|=', count($array), '
'; $ link = новый PDO ("mysql: dbname = $ databasename; host = 127.0.0.1", $ username, $ password); $ link-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); $ query = $ link-> prepare ("SELECT * FROM index WHERE sbeid =: idvar"); $ query-> bindParam (": idvar", $ paramforquery); foreach ($ массив как $ строка) { echo '
Debug: row[16]='; var_dump($row[16]); echo '
'; if ($ row [16] == "TRUE" || $ row [16] == "FALSE") { $ paramforquery = $ row [25]; echo '
Debug: paramforquery='; var_dump($paramforquery); echo '
'; $ Query-> Execute (); echo '
Debug: rowcount='; var_dump($query->rowCount()); echo '
'; $ result = $ query-> fetchAll (); // делать вещи с результатом $ $ Query-> closeCursor (); } // еще, если, делать вещи } $ link = null;
1 голос
/ 28 июня 2009

Вы уверены, что получаете соединение?

try {
    $link = new PDO("mysql:dbname=$databasename;host=127.0.0.1",$username,$password);
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
}

Это будет ловить любые исключения из попытки подключения. Если это работает нормально, попробуйте поместить запрос в строку $ link и посмотрите, что возвращается.

Если ваш запрос выполняется вручную, я бы сказал, что это как-то связано с вашим подключением к БД. Убедитесь, что у вас включен отчет об ошибках.

Дополнительно: В вашем запросе у вас есть это: idvar? Если вы не используете переменную PHP, например, $ idvar.

так

$query = $link->prepare("SELECT * FROM index WHERE sbeid=" . $idvar);
...