Базы данных SQLite PDO на PHP

#php #html #database #sqlite #pdo

#php #HTML #База данных #sqlite #pdo

Вопрос:

ИТАК, я пытался найти ответ в Интернете, но, похоже, я не получил ответа. Я прочитал все ссылки на PHP на http://php.net , и я до сих пор не могу найти конкретного ответа на этот вопрос.. В любом случае.

Мой вопрос:

У меня есть исходный файл PHP, который загружается в HTML-файл через:

 <form name="input" action="register.php" method="get">
User: <input type="text" name="user"  />
Pass: <input type="text" name="pass"  />
<p><input type="submit" value="Submit" />
</form>
 

Пока все хорошо, не так ли? Итак, тогда у меня есть этот файл .php:

 <?php
    $db = new PDO('sqlite::database:');
    $a = $_GET['user'];
    $b = $_GET['pass'];

    $firstSearchF = $db->prepare('SELECT nome FROM Users WHERE name_U = _nome');
    $firstSearchF->bindParam('_nome', $a, PDO::PARAM_STR);
    $firstSearchF->execute();
$firstSearch = $firstSearchF->fetch();

    if(empty($firstSearch))
    {
        $final = $db->prepare('INSERT INTO Users (name_u,password) VALUES(nome,passW)');
    $final->bindParam('nome', $a, PDO::PARAM_STR);
    $final->bindParam('passW', $b, PDO::PARAM_STR);
    $final->execute();

    echo 'User Registered Successfully!';
}
else
{
    echo 'Sorry, but the requested user already exists in the database. Try again!';
}
?>
 

Всякий раз, когда я что-то ввожу в форму и нажимаю отправить, результат будет следующим:

 "prepare('SELECT nome FROM Users WHERE name_U = _nome'); $firstSearchF->bindParam('_nome', $a, PDO::PARAM_STR); $firstSearchF->execute(); $firstSearch = $firstSearchF->fetch(); if(empty($firstSearch)) { $final = $db->prepare('INSERT INTO Users (name_u,password) VALUES(nome,passW)'); $final->bindParam('nome', $a, PDO::PARAM_STR); $final->bindParam('passW', $b, PDO::PARAM_STR); $final->execute(); echo 'User Registered Successfully!'; } else { echo 'Sorry, but the requested user already exists in the database. Try again!'; } ?>"
 

Единственная проблема заключается в том, что я понимаю, что вывод — это то, что находится после -> . Но почему это происходит? Я просто хотел проверить это, и я не могу заставить выходные данные работать, например, что после эхо-сигналов.

Что можно сделать, чтобы исправить это? Есть идеи? Заранее благодарю. ^^

Ответ №1:

Первым делом включите отчеты об ошибках для разработки, разместив это в верхней части вашего скрипта

 ini_set('display_errors', 'On');
error_reporting(E_ALL);
 

Во-вторых, ваш SQLite DSN неверен. Это должно быть либо

 sqlite:/path/to/database/file
 

или

 sqlite::memory:
 

См. http://www.php.net/manual/en/ref.pdo-sqlite.connection.php

Ваш параметр bind также неверен. Перед ним должен быть префикс с двоеточием, например

 $firstSearchF = $db->prepare('SELECT nome FROM Users WHERE name_U = :nome');
$firstSearchF->bindParam('nome', $a, PDO::PARAM_STR);
 

То же самое касается других операторов и привязки.

Наконец, я не до конца верю, что код, который вы опубликовали в своем вопросе, совпадает с тем, который отображается в вашей среде. Не могли бы вы перепроверить и опубликовать какие-либо исправления?

Кроме того, отправка учетных данных через GET форму, не круто. Используйте POST вместо этого. Хранение паролей в виде обычного текста, также нет-нет.


Обновить

Если подумать, учитывая то, что вы видите, я сомневаюсь, что вы запускаете это на веб-сервере с поддержкой PHP. Убедитесь, что у вас есть работающий веб-сервер с PHP, установленным в качестве модуля или CGI.

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

1. Ну, я прочитал все, и я тоже кое-что менял, но, похоже, я получаю те же результаты. Все, что я делаю, это создаю файл .php в notepad , а затем запускаю html с формой в Firefox. Кроме того, текстовые пароли — это всего лишь вопрос тестирования, потому что это для проекта Uni, на самом деле довольно просто. Чего я не понимаю, так это почему у меня проблемы с выводом.

2. Я думаю, что ваше «обновление» правильно, этот скрипт даже выполняется как PHP? jsfiddle.net/g9Sju Слишком смешно… 🙂

3. Ну, согласно тому, что я видел в классе, да, он выполняется как PHP. Я не вижу никаких ошибок в коде, вот почему я спрашиваю об этом. Не имеет смысла, что он вообще не запускается, потому что простое echo ‘Hello World’; работает отлично.

4. @Nelspike Попробуйте простой тест, подобный этому <?php $world = 'sailor'; echo "Hello, $world!"; ?>

5. @Nelspike: Вам нужен сервер, и с установленным PHP вы не можете просто открыть файл в своем браузере из любого случайного места на вашем компьютере и ожидать, что он выполнит PHP (однако HTML будет работать, потому что он запускается в браузере). См. WAMP или MAMP .