#php #sql #function
#php #sql #функция
Вопрос:
Вот мой код:
function query($query, $variables = NULL) {
$execute = sprintf($query, $variables);
$execute = mysql_query($execute);
return $execute;
}
$insert = query("INSERT INTO accounts (username, email, password, validation_code, registration_timestamp, registration_ip) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')", "$username, $email, $passwordEncrypted, $validationCode, $timestamp, $ip");
Если есть только одна переменная, она будет работать. Но с любым после этого это не сработает. Есть предложения по исправлению и улучшению этой функции? Спасибо, ребята!
Ответ №1:
перепишите ее на:
function query($query, $variables = array()) {
$execute = vprintf($query, $variables);
$execute = mysql_query($execute);
return $execute;
}
$insert = query("INSERT INTO accounts (username, email, password, validation_code, registration_timestamp, registration_ip) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')", array($username, $email, $passwordEncrypted, $validationCode, $timestamp, $ip));
Кстати, я абсолютно согласен с @Alex, и вместо этого вам нужно перейти на подготовленные инструкции mysqli / PDO.
PS: не забудьте применить mysql_real_escape_string
к каждой переменной.
Комментарии:
1. @alex: БОЖЕ, никогда не знал, что есть такая функция:-S
2. Спасибо, что сработало. На самом деле я никогда не заглядывал в mysqli / PDO. Может быть, есть на что обратить внимание
3. Ложная тревога. Я столкнулся с проблемой. Я получаю ошибки «предоставленный аргумент не является допустимым ресурсом результата MySQL в», и это повторяет мои запросы?
4. @Marcus Krueger: ну, вы пытались посмотреть, что не так с вашими запросами?
mysql_error()
var_dump(vprintf($query, $variables))
Ответ №2:
Не передавайте строку, когда вы должны передавать ее непосредственно в виде массива вашей функции.
Тем не менее, вы не должны мне создавать оболочку для mysql_query()
, когда существуют лучшие альтернативы, такие как PDO.
Комментарии:
1. Что, если в любой переменной есть запятая? ;-P
2. @zerkms Да, попытка сделать это таким образом — ловушка.
Ответ №3:
попробуйте что-то вроде этого:
function query()
{
$query = call_user_func_array('sprintf',func_get_args());
return mysql_query($query);
}
а затем используйте вот так:
$insert = query(
"INSERT INTO accounts (username, email, password, validation_code, registration_timestamp, registration_ip) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')",
$username,
$email,
$passwordEncrypted,
$validationCode,
$timestamp,
$ip
);