Подготовленные утверждения с динамическим предложением WHERE

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

function query($where) { $query = $mysql->prepare("SELECT * FROM table WHERE ?"); $query->bind_param("s", $where); $query->execute(); ... } query("table.id=123 AND table.name='abc'"); 

Я узнал, что это неправильно. Так как я могу сделать что-то подобное, у меня есть много мест, где мне нужно использовать эту функцию с разными предложениями WHERE, и сделать функцию для каждого из них нецелесообразно и поэтому не выполняет функцию и не вызывает ее напрямую ,

Для подготовленного оператора с предложением WHERE вам нужно указать, какие значения будут указаны позже, например:

 SELECT * FROM table WHERE ID=? 

если вы хотите сделать его более динамичным, вы можете указать запрос в одной функции, а затем вызвать функцию запроса. Например, у вас есть следующее:

 function query($query, $param, $where) { $query = $mysql->prepare($query); $query->bind_param($param, $where); $query->execute(); ... } 

и в вашей другой функции вы говорите:

 $results=query("SELECT * FROM table WHERE Id=?","s","1"); 

вы можете сделать это еще более сложным, создав класс запросов, который может содержать массив предложений where:

 class query { public $query; public $param; public $where; } $query=new query(); $query->query="SELECT * FROM Table WHERE group=? AND name like ?"; $query->param="ss"; $query->where = array(); $query->where[]="administrators"; $query->where[]="sam"; 

и измените функцию запроса, чтобы она выглядела так:

 function SQLCall(query $query) { $db = $mysql->prepare($query->query); call_user_func_array(array(&$db, 'bind_param'), $where) $db->execute(); ... } 

Различные запросы в выражении if (или если у вас есть много отклонений, switch ):

 if($item === 'option1'){ $query = "SELECT * FROM table WHERE item = ?;"; $preparedQuery = $mysql->prepare($query); $preparedQuery->bind_param("s", $someString); } elseif($item === 'option2'){ $query = "SELECT * FROM table WHERE different = ?;"; $preparedQuery = $mysql->prepare($query); $preparedQuery->bind_param("i", $someInteger); } $preparedQuery ->execute(); 

Чрезмерно явно, но вы должны получить общую идею. Если вы знаете, что всегда будет одинаковое количество значений, и он всегда будет одного и того же типа, вы можете его упростить:

 if($item === 'option1'){ $query = "SELECT * FROM table WHERE item = ?;"; } elseif($item === 'option2'){ $query = "SELECT * FROM table WHERE different = ?;"; } $preparedQuery = $mysql->prepare($query); $preparedQuery->bind_param("s", $someString); $preparedQuery->execute();