Мне сказали, что мой запрос ниже очень чувствителен к SQL-инъекции - вместо этого я должен использовать связанные параметры,
class search
{
public $mysqli = null;
public function __construct($mysqli,$keyword = null)
{
$this->mysqli = $mysqli;
}
public function get_result($parameter)
{
$sql = "
SELECT *
FROM root_contacts_cfm
WHERE root_contacts_cfm.cnt_id = '".$parameter."'
ORDER BY cnt_id DESC
";
$item = $this->mysqli->fetch_assoc($sql);
return $item;
}
}
Могу я спросить - как я могу превратить этот класс search
вподготовленное и связанное заявление?
Я прочитал несколько статей в Интернете, почему мы должны использовать подготовленные заявления, статья 1 статья 2
Но я все ещеПонятия не имею, как улучшить свой запрос ... Я попытался с этой поправкой ниже,
class search
{
public $mysqli = null;
public function __construct($mysqli)
{
$this->mysqli = $mysqli;
}
public function get_result($parameter)
{
$sql = "
SELECT *
FROM root_contacts_cfm
WHERE root_contacts_cfm.cnt_id = '?'
ORDER BY cnt_id DESC
";
$stmt = $this->mysqli->prepare($sql);
/* bind parameters for markers */
$stmt->bind_param("s", $parameter);
/* execute query */
$stmt->execute();
/* fetch value */
return $stmt->fetch();
}
}
Поэтому, когда я вызываю класс поиска как объект,
$mysqli = new database(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$output = new search($mysqli);
print_r($output->get_result('1'));
Я получу эту ошибку,
Предупреждение: mysqli_stmt :: bind_param () [mysqli-stmt.bind-param]: Количество переменных не соответствует количеству параметров в подготовленном выражении в C: \wamp \ www \ xxxl \ class_database.php в строке 487
, строка 487 относится к $stmt->bind_param("s", $parameter);
Спасибо.