Страница 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); обязательно