Php pdo query false
На уровне кода SQL получение данных осуществляется с помощью команды SELECT . Например, получение всех данных из таблицы Users:
В библиотеке pdo для получения данных у объекта PDO вызывается метод query() , в который передается команда SQL. Метод query() возвращает объект PDOStatement , который представляет набор всех полученных из базы данных строк.
$sql = "SELECT * FROM Users"; $result = $conn->query($sql);
Получив объект PDOStatement, мы можем извлечь данные. В частности, его метод fetch() при первом обращении первую строку (если в наборе есть строки):
При последующих обращениях метод fetch() возвращает следующие строки, пока в наборе не останется строк. Если строк в наборе больше нет, то метод возвращает false . Поэтому для получения всех строк удобно использовать циклы. Например, цикл while :
Таким образом, при каждой итерации цикл while будет получать новую строку из набора в переменную $row , пока метод $result->fetch() не возвратит false — после чего произойдет выход из цикла.
Строка возвращается в виде ассоциативного массива, где отдельные значения — это столбцы строки, а ключи этих значений — названия столбцов таблицы. Например, получение значения столбца «name» в переменную:
Вместо цикла while можно использовать цикл for/foreach. Например:
Здесь явным образом не вызывается метод $result->fetch() . Формально мы просто перебираем переменную $result как обычный массив, также помещая каждую строку в переменную $row .
Теперь все объединим и получим данные из таблицы Users из прошлых тем, которая имеет следующее определение:
CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)
Для этого определим следующий простенький скрипт:
query($sql); echo "
Id | Name | Age |
---|---|---|
" . $row["id"] . " | "; echo "" . $row["name"] . " | "; echo "" . $row["age"] . " | "; echo "
PDO::query
PDO::query() prepares and executes an SQL statement in a single function call, returning the statement as a PDOStatement object.
For a query that you need to issue multiple times, you will realize better performance if you prepare a PDOStatement object using PDO::prepare() and issue the statement with multiple calls to PDOStatement::execute() .
If you do not fetch all of the data in a result set before issuing your next call to PDO::query() , your call may fail. Call PDOStatement::closeCursor() to release the database resources associated with the PDOStatement object before issuing your next call to PDO::query() .
Note:
If the query contains placeholders, the statement must be prepared and executed separately using PDO::prepare() and PDOStatement::execute() methods.
Parameters
The SQL statement to prepare and execute.
If the SQL contains placeholders, PDO::prepare() and PDOStatement::execute() must be used instead. Alternatively, the SQL can be prepared manually before calling PDO::query() , with the data properly formatted using PDO::quote() if the driver supports it.
The default fetch mode for the returned PDOStatement . It must be one of the PDO::FETCH_* constants.
If this argument is passed to the function, the remaining arguments will be treated as though PDOStatement::setFetchMode() was called on the resultant statement object. The subsequent arguments vary depending on the selected fetch mode.
Return Values
Returns a PDOStatement object or false on failure.
Errors/Exceptions
Emits an error with level E_WARNING if the attribute PDO::ATTR_ERRMODE is set to PDO::ERRMODE_WARNING .
Throws a PDOException if the attribute PDO::ATTR_ERRMODE is set to PDO::ERRMODE_EXCEPTION .
Examples
Example #1 SQL with no placeholders can be executed using PDO::query()
$sql = ‘SELECT name, color, calories FROM fruit ORDER BY name’ ;
foreach ( $conn -> query ( $sql ) as $row ) print $row [ ‘name’ ] . «\t» ;
print $row [ ‘color’ ] . «\t» ;
print $row [ ‘calories’ ] . «\n» ;
>
?>?php
The above example will output:
apple red 150 banana yellow 250 kiwi brown 75 lemon yellow 25 orange orange 300 pear green 150 watermelon pink 90
See Also
- PDO::exec() — Execute an SQL statement and return the number of affected rows
- PDO::prepare() — Prepares a statement for execution and returns a statement object
- PDOStatement::execute() — Executes a prepared statement
PDO::query
PDO::query() выполняет SQL запрос без подготовки и возвращает результирующий набор (если есть) в виде объекта PDOStatement.
Если запрос будет запускаться многократно, для улучшения производительности приложения имеет смысл этот запрос один раз подготовить методом PDO::prepare() , а затем запускать на выполнение методом PDOStatement::execute() столько раз, сколько потребуется.
Если после выполнения предыдущего запроса вы не выбрали все данные из результирующего набора, следующий вызов PDO::query() может потерпеть неудачу. В таких случаях следует вызывать метод PDOStatement::closeCursor() , который освободит ресурсы базы данных занятые предыдущим объектом PDOStatement. После этого можно безопасно вызывать PDO::query() .
Замечание:
Несмотря на то, что функция документирована, как принимающая один аргумент, вы можете передать дополнительные аргументы. Они будут обработаны, как если бы вы вызвали PDOStatement::setFetchMode() применительно к возвращаемому объекту.
Список параметров
Текст SQL запроса для подготовки и выполнения.
Данные в запросе должны быть правильно экранированы.
Возвращаемые значения
PDO::query() возвращает объект PDOStatement или FALSE , если запрос выполнить не удалось.
Примеры
Пример #1 Демонстрация работы PDO::query
Приятной особенностью PDO::query() является то, что после выполнения SELECT запроса можно сразу работать с результирующим набором посредством курсора.
function getFruit ( $conn ) $sql = ‘SELECT name, color, calories FROM fruit ORDER BY name’ ;
foreach ( $conn -> query ( $sql ) as $row ) print $row [ ‘name’ ] . «\t» ;
print $row [ ‘color’ ] . «\t» ;
print $row [ ‘calories’ ] . «\n» ;
>
>
?>?php
Результат выполнения данного примера:
apple red 150 banana yellow 250 kiwi brown 75 lemon yellow 25 orange orange 300 pear green 150 watermelon pink 90
Смотрите также
- PDO::exec() — Запускает SQL запрос на выполнение и возвращает количество строк, задействованных в ходе его выполнения
- PDO::prepare() — Подготавливает запрос к выполнению и возвращает ассоциированный с этим запросом объект
- PDOStatement::execute() — Запускает подготовленный запрос на выполнение
Почему PDO::query() Возвращает false?
Добрый день.
В файле INDEX.PHP подключаю класс, в котором происходит соединение с базой данных.
Далее получаю объект PDO и выполняю запрос к базе данных в первый раз. В переменную $result1 попадает результат запроса, все нормально.
Выполняю аналогичные действия повторно, и на этот раз переменная $result2 принимает значение false.
Почему так?!
Предположил, что нужно прервать предыдущее соединение, присваивал переменным $db1 и $result1 значения null перед созданием повторного соединения, но это ни как не помогло.
require ROOT.'/components/DB.php'; $db1=db::getConnection(); $result1=$db1->query('select * from category'); $db2 = db::getConnection(); $result2=$db2->query('select * from category');
1 2 3 4 5 6 7 8 9 10 11 12 13
class DB { public static function getConnection(){ $params=require_once ROOT.'/config/db_params.php'; $host=$params['host']; $dbname=$params['dbname']; $user=$params['user']; $pass=$params['pass']; $Connect=new PDO("mysql::host=$host;dbname=$dbname;charset=UTF8",$user,$pass); return $Connect; } }