Я в процессе перехода на php7 & msqli. У меня есть много старых файлов php, которые будут нуждаться в подготовленных инструкциях, используя bind_result & fetch. Таким образом, прежде чем изменить все эти файлы, я хочу убедиться, что я правильно кодирую подготовленные операторы, используя bind_result & fetch, чтобы они были достаточно защищены от внедрения SQL. Код в моем примере работает для меня (привязывает и выбирает правильно), но я просто хочу быть уверен, что я их кодировал безопасно. Я все еще учусь кодировать подготовленные операторы и для других реализаций.
Я также попытался использовать get_result вместо bind_result, но для моих целей (взаимодействия с БД) я считаю, что bind_result будет достаточно.
Вот пример php-файла, который я буду использовать в качестве шаблона для всех других моих php-файлов, которые необходимо будет изменить с помощью подготовленных операторов с помощью bind_result & fetch:
<?php
//mysqli object oriented - bind_result prepared statement
//connect to database
require 'con_db.php';
//prepare, bind_result and fetch
$stmt = $con->prepare("SELECT image, caption FROM tblimages
WHERE tblimages.catID = 6 ORDER by imageID");
$stmt->execute();
$stmt->bind_result($image, $caption);
while ($stmt->fetch()) {
echo "{$image} <br> {$caption} <br> <br>";
}
$stmt->close();
//close connection
mysqli_close($con);
?>
А вот файл php, который устанавливает соединение с БД через "require", то есть con_db.php:
<?php
//mysqli object oriented connect to db
//MySQL errors get transferred into PHP exceptions in error log
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
//establish connection, any connection errors go to php.errors
$con = new mysqli('localhost','uid','pw',
'db');
?>
Надеюсь, я подготовил подготовленные операторы достаточно безопасным способом, чтобы предотвратить внедрение SQL. Но любые комментарии или предложения приветствуются. Спасибо.
ОБНОВЛЕНИЕ: Я решил показать (ниже) пример текущего кода, который я собирался изменить с помощью подготовленных операторов (с помощью bind_result, приведите пример выше). Ниже приведено представление большей части кода php / mysqli, который существует в настоящее время и который содержится во многих файлах php, которые необходимо изменить. Больше всего меняются существующие операторы SELECT mysql. Однако, основываясь на полученных мной отзывах, я считаю, что поскольку не передаются переменные, нет причин использовать подготовленные операторы с привязкой. Тем не менее, у меня есть некоторые формы, которые передают переменные (GET & POST), и я изменю эти php-файлы, используя подготовленные операторы (bind_param, bind_result & fetch). Я надеюсь, что это имело смысл :-) Я просто подумал, что было бы более полезно показать пример кода, который я изначально планировал изменить, поскольку мне, возможно, не потребуется вносить изменения в него, основываясь на отзывах, которые я получил здесь, плюс то, что я прочитал, так как мой оригинальный пост (на моей озабоченности Re: SQL инъекций). Но, пожалуйста, не стесняйтесь поправлять меня, если я ошибаюсь. Спасибо.
<?php
//mysqli object oriented - mysqli_query & mysqli_fetch_array
//connect to database
require 'con_db.php';
//query and fetch
$result = mysqli_query($con,"SELECT image, caption FROM
tblimages WHERE tblimages.catid = 1");
while($row = mysqli_fetch_array($result))
{
echo $row['image'];
echo "<br />";
echo $row['caption'];
echo "<br />";
}
mysqli_close($con);
?>