首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL语句在PHP中出错,但在SQL中没有问题

SQL语句在PHP中出错,但在SQL中没有问题
EN

Stack Overflow用户
提问于 2014-10-17 22:36:01
回答 2查看 99关注 0票数 0

以下SQL语句在SQL脚本或phpmyadmin中对MySQL数据库表正确运行,但在PHP脚本中运行时会出错。

SQL语句为:

代码语言:javascript
复制
update traceability t1 inner join traceability t2 on (t1.parent in (select t2.child)) set t1.root=false;

在PHP脚本中,代码如下所示:

代码语言:javascript
复制
$sqlupdatestmt = $db->query("update traceability t1 inner join traceability t2 on (t1.parent in (select t2.child)) set t1.root=false;");
$sqlupdatestmt->execute();

PHP日志中的错误是:

代码语言:javascript
复制
PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 't2.child' in 'field list'' in /<myfilepath> /traceability.php:50
Stack trace:
#0 /<myfilepath>/traceability.php(50): PDO->query('update traceabi...')
#1 {main}

PHP抛出PHP/SQL错误的地方出了什么问题?

以下是有关可跟踪性表模式的信息:

代码语言:javascript
复制
Field       Type        Null    Key     Default     Extra   
Variant     varchar(20) YES     MUL     NULL    
Parent      varchar(50) YES             NULL    
Child       varchar(50) YES             NULL    
Relation    varchar(20) YES             NULL    
Root        tinyint(1)  YES             NULL    
Leaf        tinyint(1)  YES             NULL
EN

回答 2

Stack Overflow用户

发布于 2014-10-17 22:46:17

试一试

代码语言:javascript
复制
UPDATE traceability AS t1 set t1.root=false WHERE t1.parent IN (SELECT child FROM traceability)

自动分析

票数 0
EN

Stack Overflow用户

发布于 2014-10-17 23:22:24

看起来您正在尝试执行自联接,以便将任何子节点的值设置为root = 'false‘。它应该看起来像这样:

代码语言:javascript
复制
UPDATE traceability AS t1
INNER JOIN traceability AS t2
  ON t1.parent = t2.child
SET t1.root='false'

在您的表中有一个双向的子-父引用似乎也不常见。根本不是一个公共的表模式。你是说每个父母只能有一个孩子吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26427376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档