Обработка атрибута PDO :: ATTR_EMULATE_PREPARES false не приводит к ошибке в сохраненной функции (MySql) - PullRequest
0 голосов
/ 11 октября 2018

Если для свойства PDO :: ATTR_EMULATE_PREPARES задать значение false, значение «Недопустимый аргумент хранимой функции Mysql» не возникает.

  • CentOS 6.10, PHP 7.2.9, MariaDB 10.2.11

MySQL хранимая функция (пример)

CREATE DEFINER=`tester`@`%` FUNCTION `blabla`(`item` TEXT, `no` INT, `option` TINYINT, `type` VARCHAR(1))....

PDO :: ATTR_EMULATE_PREPARES = false

<?php
$dbh = new PDO('mysql:......
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$sql = "SELECT blalba('test', 1, 'a')"; // <-- set invalid argument, expected 4
$stmt = $dbh->prepare($sql);
$stmt->execute();
print_r($stmt->errorInfo);

// result ==> 
Array
(
    [0] => 00000
    [1] => 
    [2] => 
)

PDO :: ATTR_EMULATE_PREPARES = true

<?php
$dbh = new PDO('mysql:......
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$sql = "SELECT blalba('test', 1, 'a')"; // <-- set invalid argument, expected 4
$stmt = $dbh->prepare($sql);
$stmt->execute();
print_r($stmt->errorInfo);

// result ==> 
Array
(
    [0] => 42000
    [1] => 1318
    [2] => Incorrect number of arguments for FUNCTION project.BLABLA; expected 4, got 3
)

set => false set => true

...