0

我写了一个查询,它直接通过服务器上的 MySQL 工作,如下所示:

创建表 tmp_1 (user1 varchar(255), pid int(11));INSERT INTO famgallerytmp_1SET user1= (SELECT titleFROM cpg15x_albumsWHERE aid= (SELECT aid FROM cpg15x_pictures WHERE pid=(select max(pid) from cpg15x_pictures))); 更新famgallerytmp_1SET pid= (SELECT MAX(pid) FROM cpg15x_pictures) ; 更新 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_1SET user1= (SELECT titleFROM cpg15x_albumsWHERE aid= (SELECT aid FROM cpg15x_pictures WHERE pid=(select max(pid) from cpg15x_pictures))); UPDATE famgallery. tmp_1SET pid= (SELECT MAX(pid) FROM cpg15x_pictures) ; UPDATE cpg15x_pictures f, tmp_1 t SET f.user1 = t.user1 WHERE f.pid = t.pid; DROP TABLE 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.

相关文件:

4

2 回答 2

2

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 查询的唯一方法。

于 2013-07-19T20:44:21.913 回答
0

我不确定 mysqli 或 cpg_db,但我知道 mysql 不支持一次提交中的多个查询。所以要说 5 个查询,你必须做 5 个 mysql_query。

我会检查以确保 cpg_db 一次支持超过 1 个查询。

于 2013-07-19T20:44:54.493 回答