嗨,我是第一次使用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();

这似乎很简单,我希望它能使用TAG_ID自动增量插入标题列中的“测试123”。但是,标题为空白(Tag_id确实会像假定的那样增量)。

有人有什么想法,我出了什么问题吗?

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

正如Atli指出的那样,它可以在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