Вопрос

Привет, я впервые играю с 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();

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

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

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

Как указал Атли и проверял, он работает на версии 5 и выше MySQL. Таким образом, это, вероятно, проблема с использованием старой версии SQL, хотя в документации PHP.NET говорится, что MySQLI «позволяет вам получить доступ к функциональности, предоставленной MySQL 4.1 и выше».

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

Это было полезно?

Решение

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

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

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

Другие советы

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

$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();

Вместо

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

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

$stmt->bindParam(1, $title, PDO::PARAM_STR);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top