直接插入与使用MySQLi:查询行为不同

时间:2017-03-13 22:02:44

标签: php mysql mysqli

我面临一个相当奇怪的问题。我在Azure上使用PHP 7.0和MySQL 5.5 DB。在数据库上测试查询时,我使用Sequel Pro直接执行查询并检查结果。从PHP,我使用完全相同的查询(但使用MySQLi预处理语句),但从PHP执行此查询时收到错误。

特别是,我遇到条件INSERT语句的问题,我在FROM子句中定义了一个临时表。有问题的查询是:

INSERT INTO tryouts (t_id, user_id, tryout_count)
    SELECT entry.t_id, entry.user_id, 0
    FROM
        (SELECT ? AS t_id, ? AS user_id) AS entry,
        tournaments
    WHERE
        (tournaments.t_id = entry.t_id) AND (tournaments.tryout_limit IS NOT NULL);

更换'?'使用Sequel Pro中的实际值按预期执行查询:插入新行。

但是,当使用MySQLi从PHP执行此查询时,我收到以下错误消息:

  

'字段列表'中的未知列'entry.t_id'

这是使用的PHP代码,其中使用以上消息触发error_log:

$query = "
    INSERT INTO tryouts (t_id, user_id, tryout_count)
        SELECT entry.t_id, entry.user_id, 0
        FROM
            (SELECT ? AS t_id, ? AS user_id) AS entry,
            tournaments
        WHERE
            (tournaments.t_id = entry.t_id) AND (tournaments.tryout_limit IS NOT NULL);";

$statement = $dbLink->stmt_init();

if (!$statement->prepare($query) ||
    !$statement->bind_param('ii', $tournamentID, $userID) ||
    !$statement->execute())
{
    error_log("EnterTournamentDetails: Something went wrong while letting the user enter the tournament: ".$dbLink->error);
    return NULL;
}

任何可以发现差异的人,或者这意味着什么? 我在其他类似的插入查询中面临同样的问题,但这个是我能找到的更简单的例子之一。

提前致谢!

0 个答案:

没有答案