缩短查询无效的功能

时间:2011-05-22 12:33:24

标签: php sql function

这是我的代码:

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");

如果只有一个变量,它将起作用。但随之而来的是它不会。关于如何修复&的任何建议改善这个功能?谢谢你们!

3 个答案:

答案 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
);