我必须遵循以下代码:
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
都能正常工作。
答案 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}'
这也可以防止任何外键约束中断和潜在的数据完整性问题。