我面临一个相当奇怪的问题。我在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;
}
任何可以发现差异的人,或者这意味着什么? 我在其他类似的插入查询中面临同样的问题,但这个是我能找到的更简单的例子之一。
提前致谢!