Я начал пытаться использовать sqlite для размещения небольших веб-сайтов, и на своем личном сервере я столкнулся с проблемой, которая отчасти портит всю идею.
У меня есть очень простой тестовый пример на двухтаблица строк в базе данных sqlite 2.x, у меня хостинг с 5.2.12, я тоже пробовал с базой данных PDO sqlite3, проблема в следующем.Таблица «users» содержит некоторую информацию, таблица выглядит следующим образом:
поля (id, имя пользователя, имя, фамилия, пароль)
В таблице есть две записи, они
запись (1, Крис, Кристофер, Томас, 123) запись (2, Адам, Адам, Таннер, 456)
Проблема немного странная, когда я запрашиваю базу данных следующим образом:
запрос ("выберите * из пользователей, где id = 2")
Я получаю правильные результаты, как показано ниже:
запись (2, Адам, Адам, Таннер, 456)
Когда я запрашиваю ВСЕ строки, как этот запрос («выбрать * из пользователей»), я получаю это:
запись (1, Крис, Кристофер, Таннер, 456) запись(2, Адамс, Адамсфор, Таннер, 456)
Видите ли вы, что, похоже, произошло?Информация во второй записи содержит меньше символов, чем первая запись, поэтому кажется, что она просто перезаписывает данные второй записью, что приводит к некоторому искажению.
chris adams <----chris </p>
Christopher Adamstopher <--- Стопер исходит от chri <strong>stopher
Код очень прост, это то, что я запускаю, я пробую прямой sqlite_* вызывает sqlite2, а затем PDO в версиях sqlite2 и sqlite3 той же базы данных, просто чтобы убедиться, что есть какие-либо сомнения.
(Кстати: я добавил несколько простых изменений в html-разметке и другие вещи, чтобы все это выглядело лучше)на веб-сайте stackoverflow эти изменения отсутствуют в исходном коде, а представляют собой просто такие вещи, как h1-> p или обертывание с помощью
to preserve the code formatting, etc).</p>
<pre><code><p>TEST 1 with direct sqlite_* calls</p>
<?php
try{
$connection = sqlite_open("../playground.sqlite",0666,$error);
$handle = sqlite_query("select * from users",$connection);
$numResults = sqlite_num_rows($handle);
for($a=0;$a<$numResults;$a++){
print("<pre>".print_r(sqlite_fetch_array($handle,SQLITE_ASSOC),true)."
");}} catch (Exception $ e) {die (" EXCEPTION OCCURED:'$ error' ");}?>
ТЕСТ PDO: SQLITE 2.x
запрос («SELECT * FROM users»);if ($ handle) {$ result = $ handle-> fetchAll (PDO :: FETCH_ASSOC);печать ( "
".print_r($result,true)."
");} else {var_dump ($ connection-> errorInfo ());print («запрос возвращен отрицательно»);}?>
PDO TEST: SQLITE 3.x
запрос («SELECT * FROM users»);if ($ handle) {$ result = $ handle-> fetchAll (PDO :: FETCH_ASSOC);печать ( "
".print_r($result,true)."
");} else {var_dump ($ connection-> errorInfo ());print («запрос возвращен отрицательно»);}?>
Результат выполнения этого кода:
TEST 1 with direct sqlite_* calls
Array
(
[id] => 1
[username] => chris
[forename] => Christopher
[surname] => Thomas
[password] => 123
)
Array
(
[id] => 2
[username] => adams
[forename] => Adamstopher
[surname] => Tanner
[password] => 456
)
PDO TEST: SQLITE 2.x
Array
(
[0] => Array
(
[id] => 1
[username] => chris
[forename] => Christopher
[surname] => Thomas
[password] => 123
)
[1] => Array
(
[id] => 2
[username] => adams
[forename] => Adamstopher
[surname] => Tanner
[password] => 456
)
)
PDO TEST: SQLITE 3.x
Array
(
[0] => Array
(
[id] => 1
[username] => chris
[forename] => Christopher
[surname] => Thomas
[password] => 123
)
[1] => Array
(
[id] => 2
[username] => adams
[forename] => Adamstopher
[surname] => Tanner
[password] => 456
)
)
Если вы знаете, почему это происходит, спасибо, что сообщили мне!