Php pdo query false

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 ""; while($row = $result->fetch())< echo ""; echo ""; echo ""; echo ""; echo ""; > echo "
IdNameAge
" . $row["id"] . "" . $row["name"] . "" . $row["age"] . "
"; > catch (PDOException $e) < echo "Database error: " . $e->getMessage(); > ?>

Источник

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» ;
>
?>

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» ;
>
>
?>

Результат выполнения данного примера:

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; } }

Источник

Читайте также:  Php seo url генерация
Оцените статью