【发布时间】:2019-07-21 13:18:18
【问题描述】:
我正在使用 MySQL 服务器 Server version: 5.6.42-cll-lve - MySQL Community Server (GPL),但我在 CONCAT() 方面遇到了一些重大问题
public function get_urls() {
// Create query
$query = "SELECT a.Name, a.PrimaryVersion, e1.URL
FROM " . $this->table . " a
INNER JOIN
FunnelsFlows b ON a.Funnel_ID = b.Funnel_ID
INNER JOIN
BackendFlows c ON b.BackendFlow_ID = c.BackendFlow_ID
INNER JOIN
BackendLevels d ON CONCAT(c.Level, :lv) = d.BackendLevel_ID
LEFT JOIN
BackendPages e1 ON d.Upsell = e1.BackendPage_ID
LEFT JOIN
BackendPages e2 ON d.Downsell1 = e2.BackendPage_ID
LEFT JOIN
BackendPages e3 ON d.Downsell2 = e3.BackendPage_ID
WHERE
a.Funnel_ID = :fid
LIMIT 0,1";
// Prepare statement
$stmt = $this->conn->prepare($query);
// Bind ID
$stmt->bindParam(':fid', $this->fid, PDO::PARAM_INT);
$stmt->bindValue(':lv', $this->lv, PDO::PARAM_STR);
// Execute query
$stmt->execute();
运行此代码会引发以下错误:PHP Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'c.Level' in 'on clause' in ...
您可以在此处查看整个数据库结构:
https://app.sqldbm.com/MySQL/Share/wBAF2JMRFFSoPPjIPdYZc0GFrngIE8md_DYjF4jNYw0
【问题讨论】:
-
CONCAT按预期工作,但您的 SQL 没有。 -
不要引用参数,不要引用标识符或在每个
(`a`.`Level`, :level)上使用反引号 -
@PM77-1 当然,根据我的帖子“我已将其范围缩小到我可能如何使用 concat 的问题”。工具在那里,它们工作正常,我只是在使用它们时遇到了问题
-
好的,现在我们需要
SHOW CREATE TABLE BackendFlows;我猜外键列名称类似于Level_ID。如果是这样,Q 可以仅由于拼写错误而关闭/删除。 -
@Quasimodo'sclone app.sqldbm.com/MySQL/Share/… 你可以在这里查看整个数据库
标签: php mysql pdo prepared-statement