Есть ли разница между SQL, выполняющимся в коде, и командной строкой MySQL? - PullRequest
0 голосов
/ 08 апреля 2010

У меня есть оператор обновления SQL, который я запускаю из программы PHP. Это подготовлено и затем выполнено. Когда я запускаю его на PHP, он сообщает о нарушении ограничения. Когда я запускаю точно такой же оператор из командной строки (который я получаю через dBug ()), он работает без ошибок. Это звучит невозможно, поэтому я продолжаю искать различия между утверждениями. Единственное, что я могу видеть, это то, что когда я выполняю его с массивом аргументов, все они выглядят как символы, а некоторые должны быть целыми числами.

Есть предложения, где искать?

Вот версия PHP (я немного подправил ее, чтобы сделать ее более разборчивой):

$st =& $db->prepare("update tbl set uid=?, frequency=? other_id=? where id=$id");
$values = array($uid, $freq, $other_id);
$res =& $db->execute($st, $values);
new dBug ($res);

Ответы [ 3 ]

1 голос
/ 08 апреля 2010

Звучит невероятно - может быть некоторая разница в SQL, который выполняется после того, как переменные были связаны Включите общий журнал запросов и сравните выполненные версии операторов в 2 сценариях.

С

1 голос
/ 08 апреля 2010

Возможно, клиент PHP и клиент MySQL используют разные кодировки.

Данные пользовательского ввода, которые не имеют аналогов в таблице символов клиента, могут быть преобразованы в ?????, что может нарушить ограничение:

SELECT  CAST('абвгд' AS CHAR CHARSET LATIN1)

---
?????

, 'абвгд' здесь кириллические символы.

Не могли бы вы предоставить образец данных, которые вы пытаетесь вставить, вместе с определением таблицы?

0 голосов
/ 08 апреля 2010

Ну, очень не хочется это говорить, но проблема была с моим копированием и вставкой. Я использовал dBug, чтобы показывать значения и спать, чтобы сделать паузу, пока я их читаю, но так как я не мог копировать и вставлять, мне пришлось повторно вводить запрос. И я опечатал одну из ценностей. Спасибо за ваши усилия, но как обычно: ошибка оператора.

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