PHP SQL оператор экранирования - PullRequest
1 голос
/ 03 сентября 2011

Я хотел показать каждому пользователю, куда он звонил, используя этот оператор:

$result = mysql_query("SELECT `CallerNumber`, `CalleeNumber`, `ServiceCost` FROM `calls` WHERE `Customer_ID` = $current_user['CustomerID']");

Часть $current_user['CustomerID'] вызывает ошибку.Я пытался поместить его в одинарные кавычки с / escape-символами, но это не сработало.Как это можно сделать?

Ответы [ 5 ]

0 голосов
/ 03 сентября 2011

Единственный правильный ответ:

Сначала экранируйте параметр, если он не был сгенерирован самой программой.
Это хорошая идея, чтобы всегда! escape-переменные, которые вы собираетесь ввести, в запрос.
Еще лучше использовать PDO, но это другая тема.

$arg = mysql_real_escape_string($current_user['CustomerID']);

Затем заключите введенную переменную в одинарные кавычки , иначе выход не будет работать!

$query = "SELECT CallerNumber, CalleeNumber, ServiceCost 
          FROM calls WHERE Customer_ID = '$arg' ");

Это также предотвратит синтаксическую ошибку в вашем операторе SQL, если $var содержит пробел или другие специальные переменные.

Обратные метки вокруг имен столбцов не нужны, если только вы не используете зарезервированное слово для имени столбца, или не используете пробелы или другие странные символы в именах столбцов / таблиц

0 голосов
/ 03 сентября 2011

Для переменных (включая массивы и даже вызовы атрибутов от объектов) в двойных кавычках или в heredocs (EOT) просто заключите их в фигурные скобки.

$result = mysql_query("SELECT `CallerNumber`, `CalleeNumber`, `ServiceCost` FROM `calls` WHERE `Customer_ID` = {$current_user['CustomerID']}");
0 голосов
/ 03 сентября 2011

Вы можете использовать {$current_user['CustomerID']} вместо $current_user['CustomerID']

Используйте это только в том случае, если $current_user['CustomerID'] не является пользовательским вводом, в противном случае вы должны использовать mysql_real_escape_string(), чтобы избежать SQL-инъекций

0 голосов
/ 03 сентября 2011

Прошло много времени с тех пор, как я написал PHP, но я думаю, что вам нужно это:

$result = mysql_query("SELECT `CallerNumber`, `CalleeNumber`, `ServiceCost` FROM `calls` WHERE `Customer_ID` = '" . mysql_real_escape_string($current_user['CustomerID']) . "'");

(Я только что посмотрел mysql_real_escape_string, извиняюсь, если это не часто используемый.)

Кроме того, экранирование выполняется с обратной косой чертой (\), а не с прямой косой чертой (/)

0 голосов
/ 03 сентября 2011

Вы можете попробовать это ниже.

$arg = $current_user['CustomerID'];
$result = mysql_query("SELECT `CallerNumber`, `CalleeNumber`, `ServiceCost` FROM `calls` WHERE `Customer_ID` = '$arg'");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...