尝试从PHP写入数据库时​​出错

时间:2011-11-02 08:18:09

标签: php android sqlite

我从Android客户端调用PHP脚本。这是PHP脚本

 <?php
//$user = $_GET['username'];
//$timestamp = $_GET['timestamp'];
//$latitude = $_GET['latitude'];
//$longtitude = $_GET['longtitude'];
//$filename = $_GET['filename'];

$user = "test";
$timestamp = 100;
$latitude = 10;
$longtitude = 10;
$filename = "test.jpg";

$dbname = "sqlite:/".dirname(__FILE__)."/terrapin";
$handle = new PDO($dbname);
if (!$handle) die ($error);

error_log("before exec",0);
$insert = "INSERT INTO information VALUES(NULL,'$user','$latitude','$longtitude','$timestamp','$filename')";
$handle->exec($insert);
error_log("after exec",0);
$handle = null;

$total = $user."\n".$timestamp."\n".$latitude."\n".$longtitude;
$name = "dumpp.txt";
$fh = fopen($name, 'w');
fwrite($fh,$total);
fclose($fh);
?>

问题是,当我从命令行运行脚本时,它工作正常并插入到数据库中。但是当我删除注释并从GET请求中获取值并从客户端调用脚本时,没有任何内容插入到数据库中。错误中没有任何内容,但是error_log语句都会打印出来。知道为什么会这样吗?

3 个答案:

答案 0 :(得分:1)

我想你可能刚刚打过经典的sqlite“Gotcha”。

如果您在open语句中指定的文件不存在,sqllite将静静地创建一个新的空数据库。这个新数据库将没有您的应用程序期望在其中定义的表。

在应用程序目录中查看在意外位置创建的空sqlite数据库。

答案 1 :(得分:0)

你应该通过print_r()来检查它。

echo "<pre>";print_r($_GET);echo "</pre>";

如果数据来了,那么你应该检查一下 你的查询...

简而言之,您需要调试您的答案。

答案 2 :(得分:0)

除非您的表中有约束,否则应插入某些内容,而不是$_GET中的内容。

SQLite数据库文件是否可写(由Apache / PHP)以及dirname(__FILE__)文件夹?