Ошибка при попытке записи в базу данных с PHP

#php #android #sqlite

#php #Android #sqlite

Вопрос:

Я вызываю PHP-скрипт из клиента Android. Вот 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 печатаются. Есть какие-нибудь идеи, почему это происходит?

Комментарии:

1. Это начало работать нормально, когда я сделал это: $db = new SQLite3("terrapin"); $db->exec($insert);

Ответ №1:

Я думаю, вы, возможно, только что попали в классический sqlite «Gotcha».

Если файл, указанный вами в инструкции open, не существует, sqllite незаметно создаст новую пустую базу данных. В этой новой базе данных не будут определены таблицы, которые ожидает ваше приложение.

Поищите в каталогах своих приложений пустую базу данных sqlite, созданную в неожиданном месте.

Ответ №2:

вы должны проверить это с помощью print_r().

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

если данные поступают, вам следует проверить
свой запрос…

короче говоря, вам нужно выполнить отладку для вашего ответа.

Ответ №3:

Если у вас нет ограничений в вашей таблице, что-то должно быть вставлено, независимо от того, существует оно $_GET или нет.

Доступен ли для записи файл базы данных SQLite (с помощью Apache / PHP), а также dirname(__FILE__) папка?