(PDO) Сбор конкретных данных из идентификатора

0

У меня есть URL-адрес: http://website.com/update.php?id= {NUMBER}

Как я могу сделать PDO, чтобы получить результаты от этого конкретного идентификатора?
Вот моя попытка для страницы update.php:

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=vector",$username,$password);

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line

  $id = $_GET['id'];

    $sql = "SELECT * FROM users WHERE id = '. $id .'";
foreach ($dbh->query($sql) as $row)
    {
    ?>
    <?php echo $row['username']; ?>
    <?php
    }


    $dbh = null;
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?>
Теги:
pdo

3 ответа

2
Лучший ответ

Заметка:-

Query $sql = "SELECT * FROM users WHERE id = '. $id.'"; неправильно

Он должен быть: - $sql = "SELECT * FROM users WHERE id =$id";

Но попробуйте использовать prepared statements PDO для предотвращения SQL INJECTION

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=vector",$username,$password);

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line

    $id = $_GET['id'];

    $sth = $dbh->prepare("SELECT * FROM users WHERE id = ?");
    $sth->execute(array($id));
    $data = $sth->fetchAll(PDO::FETCH_ASSOC);
    print_r($data); // check  values are coming or not and then try to print it
    $dbh = null;
}catch(PDOException $e){
    echo $e->getMessage();
}
  • 0
    «Используйте готовые высказывания» - это всегда хороший совет, но я не решаю его напрямую.
  • 0
    @WilliamPerron что ты имеешь ввиду?
Показать ещё 1 комментарий
1

Я думаю, ваша ошибка в том, что в вашем SQL ваши кавычки немного перепутаны...

$sql = "SELECT * FROM users WHERE id = '. $id .'";

Скорее всего, даст вам инструкцию SQL, которая будет чем-то вроде..

SELECT * FROM users WHERE id = '. 1 .'

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

$sql = "SELECT * FROM users WHERE id = $id";

Должно сработать.

  • 0
    Не забудьте обязательное предупреждение от SQL-инъекций;)
0

Я предполагаю, что ваш идентификатор - это номер, поэтому не используйте = 'id'

также вы должны использовать подготовленные статусы для защиты от атак SQL-инъекций

$sql = "SELECT * FROM users WHERE id = :id";
$bind = array( 'id' => $id );
$sth = $dbh->prepare($sql);
$sth->execute($bind);
$rows = $sth->fetchAll(PDO::FETCH_ASSOC);

foreach ($rows as $row) {
    ...
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню