У меня есть 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();
}
?>
Заметка:-
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();
}
Я думаю, ваша ошибка в том, что в вашем SQL ваши кавычки немного перепутаны...
$sql = "SELECT * FROM users WHERE id = '. $id .'";
Скорее всего, даст вам инструкцию SQL, которая будет чем-то вроде..
SELECT * FROM users WHERE id = '. 1 .'
Вы должны использовать подготовленные операторы и связывать переменные, как указывали другие, но в этом случае...
$sql = "SELECT * FROM users WHERE id = $id";
Должно сработать.
Я предполагаю, что ваш идентификатор - это номер, поэтому не используйте = '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) {
...
}