MySQLi编写了语句和REPLACE INTO

时间:2008-12-24 03:57:19

标签: php mysql mysqli

我必须遵循以下代码:

http://www.nomorepasting.com/getpaste.php?pasteid=22987

如果表中没有PHPSESSID REPLACE INTO查询工作正常,但如果存在PHPSESSID则执行调用成功,但sqlstate设置为'HY000',即'非常有帮助,$_mysqli_session_write->errno$_mysqli_session_write->error都是空的,数据列不会更新。

我很确定问题出现在我的脚本中,因为无论REPLACE INTO是否在表中,从mysql手动执行PHPSESSID都能正常工作。

3 个答案:

答案 0 :(得分:1)

为什么要尝试在会话开放功能中做好准备?我不相信在会话期间会多次调用write函数,所以在open中准备它对你没有太大帮助,你可以在你的会话写中做到这一点。

无论如何,我相信你需要在表名之后和列列表之前有一些空格。如果没有空格,我相信mysql会像你试图调用名为session()的不存在的函数一样。

REPLACE INTO session (phpsessid, data) VALUES(?, ?)

  

MySQL认为没有区别   'COUNT()'和'COUNT()'

有趣的是,当我在mysql CLI中运行以下内容时,我似乎得到了不同的结果。

mysql> select count (*);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*)' at line 1
mysql> select count(*);
+----------+
| count(*) |
+----------+
|        1 | 
+----------+
1 row in set (0.00 sec)

答案 1 :(得分:1)

“REPLACE INTO”执行2个查询:首先是“DELETE”,然后是“INSERT INTO”。 (所以新的auto_increment是“By Design”)

我也在为我的数据库会话使用“REPLACE INTO”,但我正在使用MySQLI> query()与MySQLI-> real_escape_string()而不是MySQL->准备()

答案 2 :(得分:0)

事实证明,使用REPLACE还有其他问题,我不知道:

Bug #10795: REPLACE reallocates new AUTO_INCREMENT(根据评论,这实际上并不是一个错误,而是“预期的”行为)

结果我的id字段不断增加,所以更好的解决方案是使用以下内容:

INSERT INTO会话(phpsessid,data)VALUES('{$ id}','{$ data}')在DUPLICATE KEY UPDATE data ='{$ data}'

这也可以防止任何外键约束中断和潜在的数据完整性问题。