Повторяю мой предыдущий вопрос о SQL-инъекции. Я пытаюсь настроить соединение PDO.
Для этого я хочу заменить старый код новым:
Вот старый
$conn = mysql_connect("localhost", "sec", "dubbelgeheim") or die('Error: ' . mysql_error()); mysql_select_db("bookshop"); $SQL = "select * from productcomment where ProductId='" . $input . "'"; $result = mysql_query($SQL) or die('Error: ' . mysql_error()); $row = mysql_fetch_array($result); if ($row['ProductId']) { echo "Product:" . $row['ProductId'] . "<br>"; echo "Annotation:" . $row['Comment'] . "<br>"; echo "TestOK!<br>"; } else echo "No Record!"; mysql_free_result($result); mysql_close();
И вот новое:
$input = $_GET['input']; if ($input) { $user= 'sec'; $pass = 'dubbelgeheim'; try { $dbConn = new PDO('mysql:host=127.0.0.1;dbname=bookshop', $user, $pass); } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } $escaper = $db->real_escape_string($input); $statement = $db->prepare("SELECT * FROM productcomment WHERE ProductId = ? LIMIT 1"); $statement->bind_param("s", $escaper); $statement->execute(); $result = $statement->get_result(); $statement->close(); $count = $result->num_rows; if ($count > 0) { while ($row = $result->fetch_assoc()) { echo "Product:" . $row['ProductId'] . "<br>"; echo "Annotation:" . $row['Comment'] . "<br>"; echo "TestOK!<br>"; } } else { echo 'No record!'; } $result->free(); $db->close(); }
Когда я попробовал этот новый код .. Он дает следующую ошибку:
Ошибка !: SQLSTATE [HY000] [1045] Доступ запрещен для пользователя 'sec' @ 'localhost' (с использованием пароля: YES)
Я также попытался заменить localhost 127.0.0.1.
Моя цель – сделать мою страницу безопасной для SQL-инъекции.
Пусть у кого-нибудь отличное решение!
Код выглядит нормально на первый взгляд. Попробуйте это решение. Похоже, что этот анонимный пользователь может быть проблемой.
EDIT: (как указано в комментариях)
Вкратце: рекомендуемое решение – отказаться от анонимного пользователя. Выполняя
DROP USER ''@'localhost';