Я знаком с использованием PHP для выполнения запросов mySQL. Тем не менее, я использую reg exps как защиту от инъекций. После прочтения нескольких вопросов / ответов здесь, на SO, я решил выбрать готовые заявления.
Доступны два варианта (дайте мне знать, если их больше):
Я пытаюсь понять примеры кода, приведенные на связанных страницах.
Для mysqli , пример # 1:
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) { $stmt->bind_param("s", $city);
Что делает параметр "s"
?
Если мне нужно больше одного параметра, как мне это сделать?
Для PDO , пример # 1:
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
В чем цель PDO::ATTR_CURSOR
и PDO::CURSOR_FWDONLY
здесь?
Какой из них, mysqli или PDO, вы бы порекомендовали? За и против?
Вопрос 1
Параметр s связывает «:» с любым значением $ city. Поэтому, если ваш sql « SELECT District FROM City WHERE Name = s
», ваш выполненный запрос будет « SELECT District FROM City Where Name = $city
».
Чтобы связать больше параметров, просто вызовите bindParam для каждого параметра. Вы также можете передать массив в PDOStatement :: execute.
вопрос 2
Поскольку я использую несколько разных баз данных (mysql и sqllite), я предпочитаю работать с PDO. За дополнительной информацией по этому вопросу обратитесь к mysqli или PDO – каковы плюсы и минусы? ,
s
указывает, что $city
ожидается строка
Часть PDO::ATTR_CURSOR
– это имя параметра, которое вы передаете в PDO. Значение PDO::CURSOR_FWDONLY
(которое по умолчанию, поэтому вам не нужно указывать, если) означает, что для каждого вызова, который вы выполняете для PDOStatement::fetch()
вам будет предоставлена следующая строка в результирующем наборе. Альтернативным вариантом будет PDO::CURSOR_SCROLL
– но если вы специально не знаете, что вам это нужно (и ваша база данных поддерживает его), вы должны оставить его по умолчанию.