Mysqli подготовить дать ошибку, даже если оператор SQL является действительным? - PullRequest
1 голос
/ 10 января 2012

У меня проблемы с транзакцией SQL с использованием PHP и mySQL.Вот мое утверждение:

START TRANSACTION;
INSERT INTO listings (title, price, seller, description, time, featured)
              VALUES (?, ?, ?, ?, ?, 0);
SELECT @listingid:=LAST_INSERT_ID();
INSERT INTO pictures (listid, primarypic)
                VALUES (@listingid, 1);
COMMIT;

Хотя это утверждение работает нормально, когда я вставляю его напрямую с помощью phpMyAdmin (заменяя знаки?), Оно кажется неудачным, когда я вызываю

$stmt = $mysqli->prepare("statement");

Заменить «утверждение» приведенным выше утверждением.Тот факт, что он завершился неудачно до перехода к bind_param в $ stmt, заставляет меня поверить, что это не проблема с параметрами, а скорее запрос.

Вот точная ошибка, если она помогает:

В вашем синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с «INSERT INTO списки (название, цена, продавец, описание, время, избранные)» в строке 2

Заранее спасибоза вашу помощь!

Ответы [ 2 ]

2 голосов
/ 10 января 2012

Я не думаю, что mysqli может обрабатывать составные операторы подобным образом (тем более, что есть отдельная функция commit()). Вместо START TRANSACTION; в начале и COMMIT; в конце вы должны сделать $mysqli->autocommit(false); перед запросом и $mysqli->commit();, когда закончите.

1 голос
/ 10 января 2012

Проблема в том, что вы можете «подготовить» только один оператор SQL - вы пытаетесь подготовить здесь пять операторов SQL.

Один из способов сделать то, что вы хотите, - создать хранимую процедуру.

Из mysqli_prepare() документации :

Подготавливает запрос SQL и возвращает дескриптор оператора, который будет использоваться для дальнейших операций над оператором.Запрос должен состоять из одного оператора SQL.

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