Как использовать константы PHP в подготовленных Mysqli выражениях - PullRequest
0 голосов
/ 30 января 2019

Я строю API с кучей запросов БД.Чтобы избежать повторения некоторых предварительно установленных значений в каждом запросе, я создал несколько констант PHP.Однако я не уверен в том, как правильно включать их в подготовленные Mysqli заявления.Я знаю, что константы не могут быть переданы по ссылке.Поэтому мне интересно, следует ли мне создать переменную для запроса, которая включает константы, или я мог бы просто передать строку непосредственно с константами в функцию prepare ().Так что все в порядке, если я делаю это так или я должен создать переменную и сохранить там строку перед вызовом prepare ()?

$stmt = $this->conn->prepare("SELECT city FROM masters WHERE email = ? AND estado != '" . STATE_INACTIVE . "'");
$stmt->bind_param("s", $email );

VERSUS

$query = "SELECT city FROM masters WHERE email = ? AND estado != '" . STATE_INACTIVE . "'";
$stmt = $this->conn->prepare($query);
$stmt->bind_param("s", $email );

1 Ответ

0 голосов
/ 30 января 2019

Поскольку вы используете постоянное значение, вы не подвергаете себя потенциальным атакам внедрения SQL, объединяя значение в свой запрос.Итак, я думаю, что у вас хорошо.Другой вариант - присвоить постоянное значение переменной и связать его, например, так:

$query = "SELECT city FROM masters WHERE email = ? AND estado != ?";
$inactiveState = STATE_INACTIVE;
$stmt = $this->conn->prepare($query);
$stmt->bind_param("ss", $email, $inactiveState);

Здесь также следует указать, что это mysqli, а не PDO.Если бы вы использовали PDO, вы могли бы сделать это:

$query = "SELECT city FROM masters WHERE email = ? AND estado != ?";
$stmt = $this->conn->prepare($query);
$stmt->bindParam(1, $email, PDO::PARAM_STR);
$stmt->bindValue(2, STATE_INACTIVE, PDO::PARAM_STR);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...