Синтаксическая ошибка PHP MySQL PDO в Bindparam

Привет, я пытаюсь выбрать несколько случайных строк из таблицы, используя MySQL PDO, используя PHP

$query = $conn->prepare("SELECT * FROM `products` WHERE `cat` = :cat ORDER BY RAND() LIMIT :limit_to");

$query->bindParam(':limit_to', $limit, PDO::PARAM_INT);
$query->bindParam(':cat', $cat, PDO::PARAM_INT);
$stmt = $query->execute();

Однако это вызывает ошибку синтаксиса MySQL, как это,

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2'' at line 1"

В чем причина этой ошибки и почему? Я не вижу ничего плохого в

0

Решение

Проблема в том, что когда вы делаете $limit = $_REQUEST['limit'];переменная $ limit имеет тип string,

Например (оба содержат число, но тип переменной отличается):

$varInt = 2;
$varString = "2";

var_dump ($varInt);
var_dump ($varString);

prints:
int 2
string '2' (length=1)

Таким образом, ваше подготовленное заявление становится связанным с:

$limit = $_REQUEST['limit']; // $_REQUEST['limit'] = 2
$cat = 3;

SELECT * FROM `products` WHERE `cat` = :cat ORDER BY RAND() LIMIT :limit_to

Связано с: limit_to = ‘2’,: cat = ‘3’

Проблема в синтаксисе LIMIT. Символы » нарушают синтаксис. Вы должны быть уверены, что связываете целочисленную переменную с $ limit.

// do it in first place you have access to $_REQUEST['limit'] or other global arrays , for example $_GET, $_POST

$limit = intval($_REQUEST['limit']); // $_REQUEST['limit'] = 2
$cat = intval($blablabla); // or from any other source

$query = $conn->prepare("SELECT * FROM products WHERE
cat = :cat ORDER BY RAND()
LIMIT :limit_to");

$query->bindValue(':limit_to', $limit, PDO::PARAM_INT);
$query->bindValue(':cat', $cat, PDO::PARAM_INT);
$stmt = $query->execute();

p.s
Используйте bindValue (), это лучше в 99% случаев.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector