Реализация функции быстрого доступа для замены mysqli_real_escape_string () - PullRequest
0 голосов
/ 05 октября 2011

Я хочу реализовать функцию быстрого доступа для замены обычно используемого mysqli_real_escape_string() следующим образом в отдельном скрипте , который будет включен в мой основной скрипт:

 $cxn = mysqli_connect($hostname, $username, $password, $databasename) 
  or die ("Couldn't connect to server.");

 function m($str) {return "'".mysqli_real_escape_string($cxn, $str)."'";}

Основной сценарий содержит foreach, который будет циклически проходить через массив следующим образом:

 foreach($ARRAY as $field => $value)
 {
  $fields[] = $field;
  $value = strip_tags(trim($value));
  $values[] = m($value); // function m() is implemented here
 }

После проверки оператора SQL я обнаружил, что все вставленные значения пусты.Я знаю, что если нет открытого соединения, mysqli_real_escape_string() вернет пустую строку, так что это может быть проблемой.Однако, если бы я заменил следующую строку

$values[] = m($value);

на эту,

$values[] = "'".mysqli_real_escape_string($cxn, $value)."'";

, все правильные значения будут возвращены.Итак, что может быть причиной сбоя функции быстрого доступа m()?

Ответы [ 2 ]

2 голосов
/ 05 октября 2011
$cxn = mysqli_connect();
function e($string)
{
    global $cxn;
    return mysqli_real_escape_string($string, $cxn);
}
1 голос
/ 05 октября 2011

причина проста: область видимости переменной.

, поэтому, если эта функция будет членом класса, просто измените $cxn на $this->cxn;
в противном случае в этой функции нет никакого смысла: все согласны с тем, что лучше использовать заполнители, чем вызывать функцию экранирования вручную.

Кроме того, мне любопытно, почему вы тоже ничего не делаете с полями $?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...