【问题标题】:PHP - Issue with PDO using CONCAT() with SQLitePHP - 使用带有 SQLite 的 CONCAT() 的 PDO 问题
【发布时间】:2020-11-09 01:59:03
【问题描述】:

我通过 PDO 连接器使用相同的查询来连接两者中的字符串: MySQL 数据库和一个镜像 SQLite 之一。 它们都具有相同的表相同的结构等。

但是当查询执行时,MySQL 正确执行查询,而 SQLite 出错,因此我收到错误 500。

请问有解决方案让它同时适用于两个数据库吗? 在我使用的参数化查询下方。

正如我所说: 如果没有 `IP` = CONCAT(IP, :param3) 行,一切正常(在 MySQL 和 SQLite 上)

`IP` = CONCAT(IP, :param3) 行,MySQL 正确连接,SQLite 崩溃

$query = "UPDATE downloaded SET
    `player` = player + 1,
    `when` = :param0,
    `IP` = CONCAT(IP, :param3)
    WHERE who = :param1 AND what = :param2";

$params = array(
    ':param0' => $when_,
    ':param1' => $Email,
    ':param2' => $file,
    ':param3' => $IP_Caller . "<br />"
);

提前感谢您的帮助

【问题讨论】:

    标签: php mysql sqlite pdo


    【解决方案1】:

    SQLite 不支持函数CONCAT()
    您将不得不使用运算符||:

    `IP` = IP || :param3
    

    如果您也想在 MySql 中使用相同的代码,则必须启用 PIPES_AS_CONCAT 模式。此模式默认禁用,因此运算符 || 只是逻辑 OR 的别名。

    【讨论】:

    • 另外如果你看stackoverflow.com/a/37811056/1213708MySQL也支持||如果启用了 PIPES_AS_CONCAT 模式
    • 在这种情况下,SQLite 被正确连接。但是 MySQL 用 1 代替了内部值。
    • @TormyVanCool 如果您也想在 MySql 中使用相同的代码,则必须启用 PIPES_AS_CONCAT 模式:dev.mysql.com/doc/refman/8.0/en/… 默认情况下禁用此模式,因此运算符 || 只是一个别名对于逻辑OR
    猜你喜欢
    • 1970-01-01
    • 2011-06-02
    • 2017-09-17
    • 2016-01-08
    • 1970-01-01
    • 2013-09-28
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多