#php #pdo
#php #pdo
Вопрос:
Код, который я получил до сих пор, возвращает то, что мне нужно. Я не вижу, что здесь происходит не так. При «плохой» корректировке кода он дает правильный вывод, но я думаю, что лучше сделать это правильно. И почему это не работает?
неверный вывод: Array ( [L] => L)
правильный вывод: массив ([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:
$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");
Комментарии:
1. но L меняется, я мог бы использовать размер $, но это нормально?. Я скорректирую op
2. @Rob Что значит $size — это проверка?
3. этот $size проверяется перед тем, как он войдет в функцию класса. Должно ли это быть также в самой функции класса?
4. @Rob Тогда вы можете использовать его в своем sql.