将自定义 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 SET user1 = (SELECT title FROM cpg15x_albums WHERE aid = (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 SET user1 = (SELECT title FROM cpg15x_albums WHERE aid = (从 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_querymysql_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的主要内容,如果未能解决你的问题,请参考以下文章

php 将自定义列添加到管理表

php 将自定义CSS应用于管理区域

php 将自定义字段内容添加到菜单项

php 将自定义CSS应用于管理区域

PHP 将自定义帖子类型列表显示为博客

如何将电子邮件移动到自定义帖子类型?