За последние 24 часа нас посетили 16875 программистов и 1641 робот. Сейчас ищут 974 программиста ...

Подготовленные выражения mysql (SELECT)

Тема в разделе "PHP для новичков", создана пользователем Magnum, 1 ноя 2016.

  1. Magnum

    Magnum Активный пользователь

    С нами с:
    19 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    Здравствуйте, мастера.
    Переписываю старый скрипт с уязвимостями. Раньше я выбирал данные с бд так:
    PHP:
    1. $id = intval($_GET['id']);
    2. $query = $db->query("SELECT * FROM `orders` WHERE id = $id);
    3. while($row = $query->fetch_assoc()) {
    4.    echo $row['name'].'<br>';
    5. }
    Писал для себя, потому не задумывался о sql-инъекциях. Но вот вдруг решил, что везде нужно писать правильно. Потому переписываю все на подготовленные выражения (я вообще перешел на PDO, оно мне кажется поудобнее, но тут я орудовал mysqli)

    Так вот, я переписывал, INSERT-ы, всё хорошо, удобно. А вот с SELECT-ом беда. Не пойму, как писать, чтобы было удобно и правильно.
    Вот моё временное решение, которое работает, но это жутко неудобно.
    PHP:
    1.     $order = $db->prepare("SELECT * FROM `orders` WHERE `link` = ?");
    2.     $order->bind_param('s', $_SESSION['zakaz']);
    3.     $order->execute();
    4.     $order->bind_result($row['id'], $row['name'], $row['email'], $row['description'], $row['contacts'], $row['date'], $row['order_name'], $row['status'], $row['link'], $row['password']);
    5.     $order->fetch();
    6. //да, мне было не лень назвать их все своими именами вручную :D:D
    И уже потом вывожу в их так: $row['id'] и тд.

    И ещё, не пойму, как извлекать много строк с бд. В цикле не получилось сделать таким способом.
    Буду благодарен за ответы
     
  2. Kotofey

    Kotofey Новичок

    С нами с:
    20 окт 2016
    Сообщения:
    8
    Симпатии:
    5
    Создай нужный тебе wrapper и будет счастье.
     
  3. Magnum

    Magnum Активный пользователь

    С нами с:
    19 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    Не понял, а как, и что это?
     
  4. Kotofey

    Kotofey Новичок

    С нами с:
    20 окт 2016
    Сообщения:
    8
    Симпатии:
    5
    Обертка для работы с базой, т.е. класс который описывает работу с базой, к примеру:
    PHP:
    1. class DB{
    2. private $dbConnect;
    3. public function __constuct(){
    4. $this->dbConnect = new PDO(....);
    5.   }
    6. public function selectQuery(String $sql, Array $param=null){
    7. $query = $this->dbConnect->prepare($sql);
    8. foreach($param as $paramName=>$paramValue)
    9. $query->bindParam($paramName,$paramValue);
    10. }
    11. return $query->fetch();
    12. }
    13. ...
    14. }
    15.  
    16. $db = new DB();
    17. $row = $db->selectQuery("SELECT * FROM orders WHERE link=?", ["s"=>$_SESSION["zakaz"]);
    Это позволит тебе также изменять без особых затрат драйвер для базы данных.
     
    Magnum нравится это.