Страница 1 из 1
BindParam плевать хотел на PDO::PARAM_INT
Добавлено: 2012.09.19, 19:23
MozgoEd
Необъяснимо, но факт
Пишу такой код:
Код: Выделить всё
$sql = 'SELECT vizit_time FROM users WHERE id = :id';
$cmd = Yii::app()->db->createCommand($sql);
$cmd->bindPararm(':id', $id, PDO::PARAM_INT);
$v_time = $cmd->queryScalar();
И что же я вижу при просмотре лога запросов MySQL:
SELECT vizit_time FROM users WHERE id = '28'
Вопрос - Какого лешего значение id в кавычках, ведь мы передали PDO::PARAM_INT?????
Отсюда же попутный вопрос, почему при считывании записи через DAO у нас все поля модели имеют тип данных string? Как с этим бороться? Спасибо!
Re: BindParam плевать хотел на PDO::PARAM_INT
Добавлено: 2012.09.26, 18:56
DropSQL
тема поднималась, это бага/фича самого PDO, а не Yii, так что нужно там копать. Если найдете ответ, отпишите плз
Re: BindParam плевать хотел на PDO::PARAM_INT
Добавлено: 2012.11.06, 16:40
Denyii
Задайте принудительно тип переменной, мне помогло)
Код: Выделить всё
settype($id, 'int');
$sql = 'SELECT vizit_time FROM users WHERE id = :id';
$cmd = Yii::app()->db->createCommand($sql);
$cmd->bindPararm(':id', $id, PDO::PARAM_INT);
$v_time = $cmd->queryScalar();
http://php.net/manual/ru/function.settype.php
Re: BindParam плевать хотел на PDO::PARAM_INT
Добавлено: 2014.04.22, 12:15
desc
почему то в queryScalar ошибка
Код: Выделить всё
$count=$connection->createCommand("SELECT COUNT(*) FROM post WHERE cat_link=:link ")->queryScalar();
$sql = "SELECT id, title, link, short FROM post WHERE cat_link=:link AND status=1 ORDER BY datetime DESC";
...
$post=new CSqlDataProvider($sql, array(
'totalItemCount'=>$count,
'params'=>array(':link'=>$_GET['link']),
CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound. The SQL statement executed was: SELECT COUNT(*) FROM post WHERE cat_link=:link
что не так?
Re: BindParam плевать хотел на PDO::PARAM_INT
Добавлено: 2014.12.11, 20:01
Shoe123
почему при считывании записи через DAO у нас все поля модели имеют тип данных string? Как с этим бороться? Спасибо!
Re: BindParam плевать хотел на PDO::PARAM_INT
Добавлено: 2015.11.19, 10:59
yiijeka
Shoe123 писал(а):почему при считывании записи через DAO у нас все поля модели имеют тип данных string? Как с этим бороться? Спасибо!
На yii2 правда тестировал:
Код: Выделить всё
sudo apt-get install php5-mysqlnd
sudo service apache2 restart
Код: Выделить всё
$ php -i | grep "Client API version"
Client API version => mysqlnd 5.0.11-dev - 20120503 - $Id: 3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $
Client API version => mysqlnd 5.0.11-dev - 20120503 - $Id: 3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $
а было
Код: Выделить всё
$ php -i | grep "Client API version"
Client API version => 5.5.44
Client API version => 5.5.44
Далее:
Код: Выделить всё
$pdo = Yii::$app->db->pdo;
$pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
$row = $pdo->query(
"SELECT * FROM indication"
)->fetchAll(\PDO::FETCH_NUM);
var_dump($row);die();
array (size=885)
0 =>
array (size=23)
0 => int 6
1 =>
а было
array (size=885)
0 =>
array (size=23)
'id' => string '0' (length=1)
$pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false); обязательно