2015-03-04 4 views
1

Эхо моего предыдущего вопроса о SQL-инъекции. Я пытаюсь настроить соединение PDO.мой 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(); 
} 

Когда я попробовал этот новый код. Он вызывает следующую ошибку:

Error!: SQLSTATE[HY000] [1045] Access denied for user 'sec'@'localhost' (using password: YES)

Я также попытался заменить localhost 127.0.0.1.

Моя цель - сделать мою страницу безопасной для SQL-инъекций.

У любого есть прекрасное решение!

+0

И ваше имя пользователя и пароль в порядке? Кажется, у вас нет разрешений с этим логином –

+0

Старый код работает отлично, почему бы не использовать PDO? – theMaster

+0

Вы, кажется, смешиваете методы PDO и mysqli, хотя это не связано с вашей текущей проблемой. – jeroen

ответ

0

Код выглядит нормально на первый взгляд. Попробуйте this решение. Похоже, что этот анонимный пользователь может быть проблемой.

EDIT: (как suggedted в комментариях)

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

DROP USER ''@'localhost'; 
+0

Это много кода, но я не использую linux для настройки моего апач. Я использую usbwebserver – theMaster

+0

Вы должны сосредоточиться на ** «Рекомендуемое решение - отказаться от этого анонимного пользователя (обычно это хорошо делать в любом случае)». **. BTW - почему downvotes o.O? –

+0

Я попробовал 'УДАЛИТЬ ОТ mysql.user WHERE User =' ';' а затем «FLUSH PRIVILEGES», но это не помогло. – theMaster

Смежные вопросы