PDO нюансы

На этой странице буду собирать интересные нюансы работы Pdo.

PDO может конвертировать ваши переменные

PDO нюансы

Как видно выше, после выполнения функции execute, переменная $int теперь имеет строковый тип данных.

Игры с передачей значений по ссылкам

Как известно, функция PDOStatement::bindParam принимает значение по ссылке и вроде бы ничего страшного, но с переменными происходит магия (значение не меняется, тип не меняется, debugDumpParams говорит, что все хорошо, но выполнится SQL-запрос уже не может).

$dsn = 'pgsql:host=my-postregsql;port=5433;dbname=customer';
$dbh = new PDO($dsn, 'user', 'pass');
$stmt = $dbh->prepare('
UPDATE
    public.customer 
SET 
    bonus=:bonus
WHERE
    customer_id=:customer_id
');
$params = [
    'bonus' => false,
    'customer_id' => 132,
];
foreach ($params as $field => $value) {
    $type = $field === 'bonus' ? \PDO::PARAM_BOOL : \PDO::PARAM_INT;
    // не работает (см. ошибку ниже):
    // $stmt->bindParam(':' . $field, $value, $type);
    // работает:
    $stmt->bindParam(':' . $field, $params[$field], $type);
}
// в обоих случаях $stmt->debugDumpParams(); будет одинаков
$stmt->execute();// в случае с передачей $value в bindParam, ф-я execute вернет: bool(false)
print_r($stmt->errorInfo());// в случае с передачей $value в bindParam, ф-я errorInfo вернет массив:
// Array
// (
//     [0] => 22P02
//     [1] => 7
//     [2] => ОШИБКА:  неверное значение для логического типа: "132"
// )

Удачки.

Оцени публикацию:
  • 0,0
Оценили человек: 0

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2019 YaPro.Ru

Главная » Веб-мастеру » PHP »