Функция для сокращения запросов не работает - PullRequest
1 голос
/ 22 мая 2011

Вот мой код:

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 ]

2 голосов
/ 22 мая 2011

переписать его на:

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 голос
/ 22 мая 2011

Не передавайте строку, когда вы должны передавать ее непосредственно в массив вашей функции.

Однако вы не должны делать оболочку для mysql_query(), когда существуют лучшие альтернативы, такие как PDO.

0 голосов
/ 22 мая 2011

попробуйте что-то вроде этого:

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
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...