pdo

php PDO bindValue Для имени таблицы

Имя таблицы не получится подставить в запрос с помощью bindValue(), так как если добавлять значение как строковое, то оно будет окружено одинарными кавычками, а по стандарту может быть либо просто имя таблицы, имя таблицы в обратных одинарных кавычках.

См. исходное обсуждение проблемы.

Использование подготавливаемых запросов для SQL в php

Хотелось бы уточнить один момент - когда в SQL - запросах стоит использовать конструкции типа:

$sql = "SELECT name FROM users WHERE name = :name";
		$st= $conn->prepare($sql);
		$st->bindValue( ":name", $login, PDO::PARAM_STR );
		$st->execute();

вместо простой:

$sql = "SELECT name FROM users WHERE name =  $name";
$st = $conn->query( $sql );

?

Ошибки расширения PDO -- перехват исключения для fetch()

Интересует вопрос - какие именно виды ошибок включают в себя ошибки типа PDOException?

Пример из учебника Котерова(стр 709):

php PDO Транзакция -- как создать. Пример кода.

Объявить какой-то участок кода, работающий с БД транзакцией с помощью PDO можно так:

  
$pdo->beginTransaction(); // объявлем начало транзации


 /* ...........
тут ваш код, который  выполняет sql запросы средствами pdo 
и должен выполняться как единое целое 
-- т.е. если произойдёт сбой, до того как транзакция завершит 
- всё вернётся на свои места
..........
*/

$pdo->commit(); // закрываем транзкцию

где $pdo создано как $pdo = new PDO(...);

php Пример создания PDO соединения с указанием кодировки

Как уже обсуждалось ранее установить соединением с указанием кодировки можно так:

try {
    $pdo = new PDO(
        'mysql:host=localhost;dbname=sec;charset=utf8', 'root', '11',
        [PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]);
} catch(PDOException $e){
    echo 'Невозможно установить соединение с базой данных'
        . $e->getMessage();
}

-- в данном случае мы используем кодировку utf-8, указывая это во фрагменте:

php Кириллица пишется в базу в неправильной кодировке -- кракозябры (SQL pdo, русский текст не отображается)

Предположи, что вы отправляете форму с русскими буквами, а в базе у вас оказывается не пойми что.

Решать проблему следует так (везде нужна кодировка UTF-8):

PDOException: SQLSTATE[42000] Значение почему-то берётся в кавычки

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''3' OFFSET 0' at line

Решение

Проблема в том, что при использовании:

PDOException: SQLSTATE[42000]

все равно приходится явно приводить к численному значению:

php Не отображается ошибка в логе mysql (pdo fatal error)

Получаем ошибку типа:

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''3' OFFSET 0' at line

но при этом логе mysql её не видно...При этом причина ошибки была такова.

php PDO не отображаются ошибки как включить

При создании объекта необходимо установить параметры. например:

$this->pdo = new \PDO(\Config::$db_dsn, \Config::$db_username,
       \Config::$db_password,
        array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
$this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

Pages

Subscribe to RSS - pdo