2016-01-11 3 views
1

Я хочу создать «общую» функцию для обработки всех моих подготовленных операторов в PHP.PHP Подготовленные утверждения функции

Т.е., я хочу функцию как

function doStmt($sqlQuery,$types,$arg1,...,$argN) { 
    (...) 
    if(!$stmt = $mysqli->prepare($sqlQuery)) //error blah blah; 
    if (!$stmt->bind_param($types, $arg1,...,$argN)) //error ...; 
    if (!$stmt->execute()) //error ...; 
    $stmt->close(); 
    return true; 
} 

Моя проблема связана главным образом с тем, как динамически установить N аргументы функции doStmt, а затем, как передать их bind_param.

Причина, по которой я хочу такую ​​функцию, так что мне не нужно проверять наличие ошибок & закрыть каждый раз, когда я использую подготовленный оператор.

+1

bind_param принимает два параметра. Вместо этого сделайте массив, а затем используйте его 'like $ stmt-> execute ($ array)' – user3284463

+0

Я предполагаю, что вы используете подготовленные заявления просто для защиты от инъекций? Если вы используете их для улучшения скорости, вы не получите его с помощью этого метода. (вы даже можете увидеть небольшой штраф) –

ответ

1

Попробуйте это:

function doStmt() { 
    // You could use func_num_args() get how many arguments do you have... 
    $argList = func_get_args(); 
    $sqlQuery = array_shift($argList); 
    $types = array_shift($argList); 

    // echo $sqlQuery; 
    // echo $types; 
    // print_r($argList); 

    $stmt = $mysqli->prepare($sqlQuery); 
    call_user_func_array(array($stmt, 'bind_param'), $argList); 
} 

doStmt('select ... ? ... ? ... ? ...', 'sss', 'string1', 'string2', 'string3'); 
Смежные вопросы