2012-04-16 95 views
0

这是SQL:怪异的行为PHP VS MySQL的

TRUNCATE TABLE `dc_path`; 
INSERT INTO dc_path (coords) VALUES('(40.64406436923055, -8.638539251709062)'); 
INSERT INTO dc_path (coords) VALUES('(40.62791121610622, -8.615193304443437)'); 
INSERT INTO dc_path (coords) VALUES('(40.62895347295352, -8.6625718444825)'); 

如果我试图执行上的phpmyadmin该查询它工作得很好,但通过PHP它给了我这个错误:

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 'INSERT INTO dc_path (coords) VALUES('(40.64406436923055, -8.638539251709062)');I' at line 1 

我尝试了很多东西,我无法解决它!

在此先感谢。

编辑:

PHP

function insertPath($coords){ 
    $conn = connectDB(); 
    $coords = explode(";",$coords); 
    $sql = ""; 

    $sql = "TRUNCATE TABLE `dc_path`; "; 

    for($i=0;$i<count($coords)-1;$i++){ 
     $sql .= "INSERT INTO dc_path (coords) VALUES('".$coords[$i]."');"; 
    } 
    echo $sql; 
    $query = mysql_query($sql, $conn) or die(mysql_error()); 

    closeDB($conn); 
    return true; 
} 

的$ COORDS变量包含类似这些值:

(40.638854101691635, -8.6515855163575);(40.629474595277166, -8.63235944213875); 
+1

请张贴的PHP。 – Bojangles 2012-04-16 22:27:14

+2

一次只能执行一个查询。 'mysql_query()发送一个唯一的查询(不支持多个查询)''。 – Basti 2012-04-16 22:28:30

+0

似乎有点奇怪,值将有“'在他们周围通常坐标存储为数字是不是他们? dc_path的结构是什么?第一个字段是一个文本varchar(255?)什么的? – xQbert 2012-04-16 22:30:50

回答

2
function insertPath($coords){ 
    $conn = connectDB(); 
    $coords = explode(";",$coords); 

    mysql_query("TRUNCATE TABLE `dc_path`", $conn); 

    for($i=0;$i<count($coords)-1;$i++){ 
     mysql_query("INSERT INTO dc_path (coords) VALUES('".$coords[$i]."')", $conn); 
    } 

    closeDB($conn); 
    return true; 
} 
3

不要使用老的mysql_connect API,使用的mysqli - 这在一个支持多个语句。

了解更多关于不同的PHP - MySQL的API的位置:http://www.php.net/manual/en/mysqlinfo.api.choosing.php

有它说,不建议用于新项目的旧版本的MySQL API,以及长期折旧已经公布。

+1

我会在下一个大项目中使用它,不知道这个!谢谢(你的)信息! :) – silentw 2012-04-16 22:35:32

4

您不能在一个mysql_query()调用中执行多个查询。

所以(在末尾而不;)拆分字符串4个分离查询,一切都将是您使用的功能来运行这个工作

3

?如果您使用的mysql_query那么你只能做一个查询的时间,但是你可以插入语句合并成一个像

INSERT INTO dc_path (coords) VALUES 
('(40.64406436923055, -8.638539251709062)'), 
('(40.62791121610622, -8.615193304443437)'), 
('(40.62895347295352, -8.6625718444825)'); 
+0

我不认为这与OP的代码不工作有什么关系。 – Starx 2012-04-16 22:33:36

+0

然后我建议你阅读mysql_query上的php手册。它一次支持一个查询。否则它可能是独角兽造成它不起作用。 – Geekfish 2012-04-16 22:35:39

+1

@Starx:但它仍然是一个伟大的建议,甚至值得被检查。 – zerkms 2012-04-16 22:36:04

1

您不能查询使用的mysql_query多个语句()。

查询像您使用执行查询此

for($i=0;$i<count($coords)-1;$i++){ 
    $sql = "INSERT INTO dc_path (coords) VALUES('".$coords[$i]."');"; 
    $query = mysql_query($sql, $conn) or die(mysql_error()); 
}