【发布时间】:2013-07-01 11:28:39
【问题描述】:
我正在尝试从我的 PHP 类执行下面的 SQL 代码,但是当我这样做时会出错。以下代码在 PHPMyAdmin 的控制台中完美运行,但在 PHP 中却没有。
SET @columns := (
SELECT
GROUP_CONCAT(column_name)
FROM information_schema.columns
WHERE table_schema = 'test'
AND table_name = 'mytable'
AND column_key <> 'PRI'
);
SET @sql := (
SELECT CONCAT(
'INSERT INTO mytable (', @columns, ') ',
'SELECT ', @columns, ' FROM mytable ',
'WHERE id = 1;'
)
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
这就是我在 PHP 中的做法:
$sql='';
$sql.="SET @columns := (
SELECT
GROUP_CONCAT(column_name)
FROM information_schema.columns
WHERE table_schema = 'test'
AND table_name = 'mytable'
AND column_key <> 'PRI'
);";
$sql.="SET @sql := (
SELECT CONCAT(
'INSERT INTO mytable (', @columns, ') ',
'SELECT ', @columns, ' FROM mytable ',
'WHERE id = 1;'
)
);";
$sql.="PREPARE stmt FROM @sql;
EXECUTE stmt;";
$result = mysql_query($sql, $this->connection);
我做错了什么?
看到错误::
Database query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @sql := (
SELECT CONCAT(
'INSERT INTO mytable(', @colu' at line 9
【问题讨论】:
-
据我所知,已弃用的旧版 mysql_... 扩展不支持多语句执行。您必须一个一个地运行它们。
-
你为什么不用PDO?
-
@ÁlvaroG.Vicario 我以这种方式尝试过的结果仍然相同......该怎么办......当它到达@columns 时,该语句正在中断......!!
-
@Bojangles 那是怎么回事..??请
-
每当您说“它给我一个错误”时,您还应该提供您所看到的确切错误消息。如果可能的话,连同代码中抛出错误的点一起。