代码之家  ›  专栏  ›  技术社区  ›  Kevin Loney

MySQLi准备语句并替换为

  •  0
  • Kevin Loney  · 技术社区  · 16 年前

    我必须输入以下代码:

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

    如果 PHPSESSID REPLACE INTO 查询工作正常,但是如果 PHPSESSID $_mysqli_session_write->errno $_mysqli_session_write->error 都为空且数据列不更新。

    我相当肯定问题出在我的脚本中的某个地方,因为手动执行 从mysql工作良好,无论是否 PHPSESSID

    3 回复  |  直到 6 年前
        1
  •  1
  •   Zoredache    16 年前

    为什么您要在会话打开功能中进行准备?我不相信在一个会话中多次调用write函数,因此在开放状态下准备它对您没有多大帮助,您最好在会话write中这样做。

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

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

    MySQL看不出两者之间的区别 )"和"伯爵"( )'

    有趣的是,当我在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)
    
        2
  •  1
  •   Syscall - leaving SO... Juhzuri    3 年前

    REPLACE INTO DELETE INSERT INTO (因此,新的自动增量是“按设计”)

    我也在使用 MySQLi->query() 结合 MySQLI->real_escape_string() 代替 MySQLi->prepare()

        3
  •  0
  •   Syscall - leaving SO... Juhzuri    3 年前

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

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

     INSERT INTO session(phpsessid, data) VALUES('{$id}', '{$data}')
         ON DUPLICATE KEY UPDATE data='{$data}'