PHP到mySQL查询错误

时间:2012-10-09 12:58:02

标签: php mysql ios

我收到此错误:

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 ' ,,)' at line 2

在这个PHP代码上:

<?php

$id = $_POST['id'];
$longitude = $_POST['longitude'];
$latitude = $_POST['latitude'];
$timestamp = $_POST['stringFromDate'];



$link = mysql_connect('server', 'user', 'pass')
or die('Could not connect: ' . mysql_error());

mysql_select_db('db_name') or die('Could not select database');

// Performing SQL query
$query="INSERT INTO locatie (id, longitude, latitude, timestamp) 
VALUES ($id, $longitude,$latitude,$timestamp)";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
echo "OK";

// Free resultset
mysql_free_result($result);

// Closing connection
mysql_close($link);
?>

我是初学者,所以我不知道我做错了什么

修改: 这是写入php文件的代码:

 - (void)myFuntionThatWritesToDatabaseInBackgroundWithLatitude:(NSString *)latitude  longitude:(NSString *)longitude date:

 (NSString *)stringFromDate {


_phonenumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"phoneNumber"];

NSMutableString *postString = [NSMutableString stringWithString:kPostURL];
NSString*jsonString = [[NSString alloc] initWithFormat:@"{\"id\":\"%@\",\"longitude\":\"%@\",\"latitude\":\"%@\",\"timestamp\":\"%@\"}",_phonenumber, longitude , latitude, stringFromDate];

[postString appendString:[NSString stringWithFormat:@"?data=%@", jsonString]];
[postString setString:[postString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:postString ]];
[request setHTTPMethod:@"POST"];

[[NSURLConnection alloc] initWithRequest:request delegate:self ];
NSLog(@"Post String =%@", postString);


//    LocationTestViewController*locationTestViewController = [[LocationTestViewController alloc]init];
//    phonenumber = locationTestViewController.telefoonnummer;
NSLog(@"HERE1 : %@", _phonenumber);





 }

5 个答案:

答案 0 :(得分:2)

问题1:您正在使用mysql_*功能。这些有一个红色警告框告诉你不要出于某种原因使用它们。

问题2:您没有逃避数据。这使您容易受到XSS攻击和意外输入引起的SQL语法错误的影响。

问题3:您没有在SQL查询中引用数据。

所有这三个问题都可以通过using prepared statements and parameterized queries解决,这需要现代API(解决问题1)并自动引用和转义数据(解决问题2和3)。

答案 1 :(得分:0)

我真的建议,像@MichaelBerkowski说,你检查你的POST数据的内容。 我很确定其中一个变量是完全空的:

$id = $_POST['id'];
$longitude = $_POST['longitude'];
$latitude = $_POST['latitude'];
$timestamp = $_POST['stringFromDate'];

答案 2 :(得分:0)

也许你应该使用另一种表示法并防止SQL注入。

最好的方法是使用准备好的陈述。

http://php.net/manual/de/pdo.prepared-statements.php

$id = $_POST['id'];
$longitude = $_POST['longitude'];
$latitude = $_POST['latitude'];
$timestamp = $_POST['stringFromDate'];

$stmt = $dbh->prepare("INSERT INTO locatie (id, longitude, latitude, timestamp) VALUES (?,?,?,?)");
$stmt->bindParam(1, $id);
$stmt->bindParam(2, $longitude);
$stmt->bindParam(3, $latitude);
$stmt->bindParam(4, $timestamp);

答案 3 :(得分:0)

如果它们是文本,则需要添加引号:

$query="INSERT INTO locatie (id, longitude, latitude, timestamp) 
VALUES ($id, '$longitude','$latitude','$timestamp')";

答案 4 :(得分:-2)

你应该把变量放在单个''Quote

$ query =“INSERT INTO locatie(id,经度,纬度,时间戳) VALUES('$ id','$ longitude','$ latitude','$ timestamp')“;