Я работаю с чужого соединения с базой данных. Функция PHP работает отлично, пока я передаю ей как минимум три аргумента. Если бы я передать ему два аргумента, то журнал апач говорит:Функция не принимает меньше трех аргументов
mysql_real_escape_string() expects parameter 2 to be resource, null given
Мне нужна функция, чтобы взять запрос SQL, как так:
$sql = DatabaseManager::prepare("SELECT * FROM sometable WHERE somevar = %d", $var);
и подготовить его для безопасного выполнения. Может кто-то помочь заставить его принять два аргумента?
public static function prepare($query = null) { // ($query, *$args)
$args = func_get_args();
array_shift($args);
// If args were passed as an array (as in vsprintf), move them up
if (isset($args[0]) && is_array($args[0])){
$args = $args[0];
}
$query = str_replace("'%s'", '%s', $query); // in case someone mistakenly already singlequoted it
$query = str_replace('"%s"', '%s', $query); // doublequote unquoting
$query = str_replace('%s', "'%s'", $query); // quote the strings
for($i=0; $i<count($args); $i++){
$args[$i] = mysql_real_escape_string($args[$i], self::$currentCon);
}
//array_walk($args, array(&$this, 'mysql_real_escape_string'));
return @vsprintf($query, $args);
}
Спасибо тонну!
EDIT
Как deceze указывает, что это о self::$currentCon)
и означает, что соединение с базой данных возвращается null
Я пробовал это несколько раз. Тем не менее любопытно, почему это работает:
$sql = DatabaseManager::prepare("SELECT * FROM sometable WHERE id = ".$somevar);
, но это не удается:
$sql = DatabaseManager::prepare("SELECT * FROM sometable WHERE somevar = %d", $var);
Как это повлияет self::$currentCon)
?
Пожалуйста, приведите пример того, как вы назвали бы эту функцию только с одним аргументом. Кажется, что изменение, которое вы ищете, не соответствует цели функции. – 2010-09-08 06:44:16
@Jeff, правда, что. Многие извинения за плохую формулировку. Я имею в виду один дополнительный аргумент для SQL-запроса. Я отредактировал свой пост, чтобы уточнить. Но до сих пор это займет всего три аргумента (включая SQL-запрос) или больше. – Kyle
Это выглядит подозрительно, как будто вы пытаетесь изобрести колесо (PDO). Рассматривали ли вы использование существующей библиотеки подключения к базе данных? – Amber