Я пытаюсь определить SELECT
в php
в моей базе данных с подготовленным оператором, используя массив значений вставки.На данный момент я работаю с хранимыми процедурами, и мой код выглядит следующим образом:
$user_id = $user["id_user_key"];
$is_active = 1;
$stmt = $db->prepare("CALL spGetUserProducts(?, ?)");
$stmt->bind_param("ii", $user_id, $is_active);
$stmt->execute();
$result = $stmt->get_result();
Это работает нормально, но на данный момент я хотел бы избавиться от своих хранимых процедур и сделать все SQL
in php
Я изменил приведенный выше код на это:
$user_id = $user["id_user_key"];
$is_active = 1;
$stmt = $db->prepare(
"SELECT
tp.id_product AS id,
tp.product_name AS pname,
tp.product_code AS pcode,
tp.product_icon AS picon
FROM
tbl_user_products tup
INNER JOIN
tbl_products tp
ON tp.id_product = tup.id_product_fk
WHERE
tup.active = :isActive
AND tup.id_user_fk = :getUser"
);
$stmt->execute(array(
":getUser" => $user_id,
":isActive" => $is_active)
);
$result = $stmt->get_result();
Когда я запускаю этот скрипт, я получаю следующую ошибку:
Uncaught mysqli_sql_exception: у вас естьошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с ': isActive AND tup.id_user_fk =: getUser' в строке 12
Чтобы быть уверенным, я также запустил свой SQLскрипт без привязки параметров, вот так:
$user_id = $user["id_user_key"];
$is_active = 1;
$stmt = $db->prepare(
"SELECT
tp.id_product AS id,
tp.product_name AS pname,
tp.product_code AS pcode,
tp.product_icon AS picon
FROM
tbl_user_products tup
INNER JOIN
tbl_products tp
ON tp.id_product = tup.id_product_fk
WHERE
tup.active = 1
AND tup.id_user_fk = 1"
);
$stmt->execute();
$result = $stmt->get_result();
И это тоже работает.Кажется, что связывание :getUser
и :isActive
не работает, хотя я последовал этому примеру с php.net:
/* Execute a prepared statement by passing an array of insert values */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->execute(array(':calories' => $calories, ':colour' => $colour));
Я запускаю вещи на XAMPP 3.2.2.
Есть мысли по этому поводу?