这是我的代码:
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");
如果只有一个变量,它将起作用。但随之而来的是它不会。关于如何修复&的任何建议改善这个功能?谢谢你们!
答案 0 :(得分:2)
将其重写为:
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 :(得分:1)
当你应该将一个数组直接传递给你的函数时,不要传递一个字符串。
但是,当存在更好的替代方案时,你不应该为mysql_query()
制作包装器,例如PDO。
答案 2 :(得分:0)
尝试这样的事情:
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
);