将自定义 MySQL 查询移至 PHP
Posted
技术标签:
【中文标题】将自定义 MySQL 查询移至 PHP【英文标题】:Moving custom MySQL query into PHP 【发布时间】:2013-07-19 06:30:48 【问题描述】:我写了一个查询,它直接通过服务器上的 mysql 运行,如下所示:
CREATE TABLE tmp_1 (user1 varchar(255), pid int(11));INSERT INTO
famgallery
.tmp_1
SETuser1
= (SELECTtitle
FROMcpg15x_albums
WHEREaid
= (SELECT帮助来自 cpg15x_pictures WHERE pid=(select max(pid) from cpg15x_pictures))); 更新famgallery
.tmp_1
设置pid
= (从 cpg15x_pictures 中选择 MAX(pid)) ;更新 cpg15x_pictures f, tmp_1 t SET f.user1 = t.user1 WHERE f.pid = t.pid;删除表 tmp_1;
问题在于尝试将其移至 php:
cpg_db_query("CREATE TABLE tmp_1 (user1 varchar(255), pid int(11));INSERT INTO
famgallery
.tmp_1
SETuser1
= (SELECTtitle
FROMcpg15x_albums
WHEREaid
= (从 cpg15x_pictures 中选择帮助 pid=(从 cpg15x_pictures 中选择 max(pid)))); 更新famgallery
.tmp_1
设置pid
= (从 cpg15x_pictures 中选择 MAX(pid)) ;更新 cpg15x_pictures f, tmp_1 t SET f.user1 = t.user1 WHERE f.pid = t.pid;删除表 tmp_1;")
经过一天的实验,应用程序不断给我这个严重错误:
mySQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在附近使用的正确语法:
'INSERT INTO cpg15x_tmp_1 SET `user1` = (SELECT `title` FROM cpg15x_albums WHERE ' at line 1. File: /home/content/47/9243147/html/family/include/functions.inc.php - Line: 270
我开始认为应用程序代码中的某个地方存在冲突,因为我不明白为什么它直接在服务器上运行良好,但在经过这么多的修补后无法在 PHP 中运行。任何想法将不胜感激。
cpg_db_query
内置在应用程序中。据我所知,它执行与mysqli_query
相同的操作。
相关文件:
http://www.mconchicago.com/upload.txt http://www.mconchicago.com/init.inc.txt【问题讨论】:
您确定cpg_db_query()
允许多个查询吗?您可能需要将其拆分为多个 cpg_db_query()
s
【参考方案1】:
cpg_db_query
是mysql_query
的包装;而你只会运行一个查询 - 你正试图在那里运行多个查询。
如果你想这样做,你必须把它分解成不同的查询,并分别运行它们:
cpg_db_query("CREATE TABLE cpg15x_tmp_1 (user1 varchar(255), pid int(11))");
cpg_db_query("INSERT INTO cpg15x_tmp_1 SET user1 = (SELECT title FROM cpg15x_albums WHERE aid = (SELECT aid FROM cpg15x_pictures WHERE pid = (select max(pid) from cpg15x_pictures)))");
cpg_db_query("UPDATE famgallery.cpg15x_tmp_1 SET pid = (SELECT MAX(pid) FROM cpg15x_pictures)");
cpg_db_query("UPDATE cpg15x_pictures f, cpg15x_tmp_1 t SET f.user1 = t.user1 WHERE f.pid = t.pid");
cpg_db_query("DROP TABLE cpg15x_tmp_1");
mysqli_*
有 multi_query,这是我所知道的使用单个调用运行多个 SQL 查询的唯一方法。
【讨论】:
即使 mysqli 的多重查询仍然会触发单个查询。它看起来就像对代码的单个 query() 调用。 非常感谢。把它分开就可以了。我不知道这个限制。 也感谢其他评论员。每个人的意见在这里都很有帮助。【参考方案2】:我不确定 mysqli 或 cpg_db,但我知道 mysql 不支持一次提交中的多个查询。所以要说 5 个查询,你必须做 5 个 mysql_query。
我会检查以确保 cpg_db 一次支持超过 1 个查询。
【讨论】:
以上是关于将自定义 MySQL 查询移至 PHP的主要内容,如果未能解决你的问题,请参考以下文章