Вставка в базу данных с помощью stmt и mysqli - PullRequest
0 голосов
/ 27 января 2010

Привет, я впервые играю с stmt (глядя на преобразование моего кода после предварительного использования стандартных функций mysqli через класс расширения.

Однако я не могу заставить его работать. Я использую PHP 5.2.11 и MySQL 4.1.22.

У меня есть такая структура таблицы:

CREATE TABLE IF NOT EXISTS `tags` (
  `tag_id` smallint(3) unsigned NOT NULL auto_increment,
  `title` varchar(32) NOT NULL default '',
  PRIMARY KEY  (`tag_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

и вот мой код, я использовал http://devzone.zend.com/article/686 и php.net в качестве ссылок.

$mysqli = new mysqli('***','***','***','***');

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = $mysqli->prepare("INSERT INTO tags (title) VALUES (?)");

$stmt->bind_param('s', $title);

$title = 'test 123';

$stmt->execute();

$stmt->close();

$mysqli->close();

Это кажется достаточно простым, и я надеюсь, что он вставит "test 123" в столбец заголовка с автоматическим приращением tag_id. Но вместо этого заголовок пуст (tag_id делает приращение, как можно предположить).

У кого-нибудь есть идеи, где я ошибаюсь?

=============================================== ==

Как указал и протестировал atli, он работает на MYSQL версии 5 и выше. Так что это, вероятно, проблема с использованием старой версии sql, хотя в документации php.net говорится, что mysqli «позволяет вам получить доступ к функциональности, предоставляемой MySQL 4.1 и выше».

Если кто-то может предложить другую причину, по которой он может не работать или как заставить его работать в моей среде, это было бы здорово. Если нет, я полагаю, что я буду использовать собственное расширение класса mysqli для подготовки и очистки запросов.

Ответы [ 3 ]

1 голос
/ 27 января 2010

Я проверил ваш код на моем тестовом сервере, и он отлично работает. (с использованием PHP 5.3 и MySQL 5.1.37)
Так что это не сам код или дизайн базы данных.

Моим первым предположением будет несовместимость с вашей версией MySQL.
Вы можете попробовать использовать функцию mysqli_stmt :: get_warnings , чтобы увидеть, есть ли какие-либо предупреждения.

Если это вообще возможно, я бы рекомендовал обновить MySQL. Версия, которую вы используете, становится довольно древней. - Я собирался установить 4.1 и проверить это на нем (просто для удовольствия: P) , но у них даже нет доступных загрузок.

0 голосов
/ 25 марта 2017

Определите $ title перед его использованием. Вы должны включить эту строку

$title = 'test 123';

до

$stmt->bind_param('s', $title);

Полный код:

$mysqli = new mysqli('***','***','***','***');

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$title = 'test 123';

$stmt = $mysqli->prepare("INSERT INTO tags (title) VALUES (?)");

$stmt->bind_param('s', $title);

$stmt->execute();

$stmt->close();

$mysqli->close();
0 голосов
/ 27 января 2010

вместо

$stmt->bind_param('s', $title);

попробуйте это:

$stmt->bindParam(1, $title, PDO::PARAM_STR);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...