Php MySQL PDO插入。。。如果语句不工作,请选择

Php MySQL PDO插入。。。如果语句不工作,请选择,php,mysql,pdo,Php,Mysql,Pdo,编辑:愚蠢的变量名不匹配。即使经过多年的编码,也会犯一些简单的错误 $query = " INSERT INTO table1 (team_id, user_id, team_leader, start_date) SELECT b.team_id, a.user_id, IF (a.agent_id = :leader, 1, 0), :startdate FROM table2 a LEF

编辑:愚蠢的变量名不匹配。即使经过多年的编码,也会犯一些简单的错误

   $query = "
    INSERT INTO table1 (team_id, user_id, team_leader, start_date)
    SELECT b.team_id,
           a.user_id,
           IF (a.agent_id = :leader, 1, 0),
           :startdate
    FROM table2 a
    LEFT JOIN table3 b ON a.ccb_team_id = b.ccb_team_id
    WHERE b.team_active = 1
      AND a.user_active = 1
      AND b.metro_id = :metroid 
      AND a.ccb_team_id = :teamid
    ON DUPLICATE KEY
       UPDATE team_leader = VALUES(team_leader)";
数据:

如果我使用PDO变量所在的实际数据在phpMyAdmin中尝试上述查询,那么对于相关用户,团队领导正确地设置为1时,它就可以正常工作。在PHP CLI中运行此命令时,它不起作用,所有团队领导字段都恢复为0

我已验证
$a->ccb\U团队负责人
包含正确信息。PDO变量在IF语句中不起作用吗


编辑:所以在我的PDO查询中使用它时,这似乎实际上是某种对象问题。simplexml中的对象$a输出值fine,但在查询中使用时不会输出。…

您必须重写查询,以便参数位于where子句中。请参阅文档中的示例:


或者您可以自己转义文本并将其直接添加到查询字符串中。

字段名和表名不能绑定。结束。它不是字段或表名,而是值。IF(a.agent\u id=123456,1,0)。
:表2中的起始日期
文本可能出现在选择列表中。是否尝试使用大小写而不是
IF(a.agent\u id=:leader,1,0)
当a.agent\u id=:leader然后1 else 0 end时的情况
a.agent\u id和:leader是什么数据类型?也许if函数遇到了数据类型不匹配的问题?谢谢,我不知道PDO绑定只能存在于WHERE子句中。我自己会逃脱的。但它不应该给出一个错误吗?它处理IF和CASE版本时没有错误。@DaveK,您可以在查询中的任何位置使用
bind
param/values作为
值替换。您不受
where
子句的限制。我正要问这个问题,因为它仍然不起作用。我在SELECT中尝试了IF或CASE,并将变量添加到查询字符串中,而不是PDO中,但它在CLI上仍然不起作用,但在phpmyadmin上效果很好,因此我还缺少其他一些东西……我还找不到更好的源代码,但这一点及其修复程序还表明,绑定值可能出现在
SELECT
列表中,不仅在
WHERE
子句中。
$query_data = array(
            ':metroid' => $metro_id,
            ':leader' => $a->ccb_leader_id,
            ':startdate' => $datetime,
            ':teamid' => $a->ccb_team_id
        );