PHP: PDO (mysql) с использованием bindValue возвращает неверный результат - PullRequest
0 голосов
/ 01 ноября 2011

Код, который я получил до сих пор, возвращает то, что мне нужно.Я не вижу, что здесь происходит не так.С «плохой» настройкой кода это дает правильный вывод, но я думаю, что лучше делать это правильно.И почему это не работает?

неправильный вывод: Array ([L] => L)

правильный вывод: Array ([L] => 9)

этот код дает неправильный вывод:

public function getStockByID_SIZE($size, $stockId){
    try {

    $this->_dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

    $sth=$this->_dbh->prepare("SELECT :size from stock WHERE id_product = :stockId"); 
    $sth->bindValue(':size', $size, PDO::PARAM_STR);
    $sth->bindValue(":stockId", $stockId);

    $sth->execute();
    $result = $sth->fetch(PDO::FETCH_ASSOC);
    return $result;

    } catch (PDOException $e) {     
        return "Error";  
    }
}

Тот же код, но с (плохой) настройкой возвращает правильный код:

 $sth=$this->_dbh->prepare("SELECT $size from stock WHERE id_product = :stockId"); 

// по сравнению с:

 $sth=$this->_dbh->prepare("SELECT :size from stock WHERE id_product = :stockId");
 $sth->bindValue(':size', $size); //use of PDO::PARAM_STR doenst matter for outcome

1 Ответ

2 голосов
/ 01 ноября 2011

$sth=$this->_dbh->prepare("SELECT L from stock WHERE id_product = :stockId"); правильный путь.

Ваш путь просто делает SELECT 'L' from stock WHERE id_product = :stockId, который дает вам результат 'L'.

Вы можете просто сделать что-то вроде ниже после проверки $size,

$sth=$this->_dbh->prepare("SELECT $size from stock WHERE id_product = :stockId");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...