У меня возникли проблемы с использованием MySQLi для вставки значений в базу данных. Я не получаю никаких ошибок, но вставляемые значения неверны. Одно из полей TEXT всегда пусто, а другое всегда имеет значение «ý». Поле INT всегда содержит значение 50396416. Я использую utf8_general_ci.
CREATE TABLE events ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , title TEXT NOT NULL , content TEXT NOT NULL , date INT UNSIGNED NOT NULL );
Вот что мне нужно вставить значения:
function insertEvent($title, $content, $date) { $stmt = $this->db->prepare('INSERT INTO events (title, content, date) VALUES (?, ?, ?)'); $stmt->bind_param('ssi', $title, $content, $date); $stmt->execute(); $stmt->close(); }
Это кажется довольно простым, поэтому я не знаю, в чем проблема. Если у вас есть какие-либо советы, я бы хотел это услышать!
Я не знаю, может ли это быть проблемой с моим кодом или с базой данных, потому что все работало правильно на одном сервере, но не на другом.
На самом деле я просто заметил через phpinfo()
, что серверы, похоже, используют разные версии MySQL. Может ли это вызвать проблему?
Я также уверен, что данные, которые я использую, верны. Я получаю значения из формы с помощью $_POST
. Например, если для поля «title» введите «asdf»:
$stmt->bind_param('ssi', $title, $content, $date); $title = $_POST['title']; echo $title; // echoes "asdf"
Похоже, что это была просто несовместимость с версией MySql (4.something) на сервере. Я заставил их обновить его, и теперь он работает нормально. Спасибо всем, за помощь!
Либо используйте отладчик (например, xdebug + netbeans как frontend), либо добавьте еще один отладочный вывод.
echo "<pre>Debug: $stmt->bind_param('ssi', $title, $content, $date);\n</pre>"; $stmt->bind_param('ssi', $title, $content, $date); $stmt->execute();
Попробуй это:
$stmt = $this->db->prepare("INSERT INTO events (title, content, date) VALUES ('?', '?', '?')");