2009-04-08 2 views
9

Я использую PHP с MySQLi, и я нахожусь в ситуации, когда у меня есть вопросы, какпараметров в MySQLi

SELECT $fields FROM $table WHERE $this=$that AND $this2=$that2 

До сих пор я написал код, который сростки вверх массив, который я даю его , например:

$search = array(name=michael, age=20) //turns into 
SELECT $fields FROM $table WHERE name=michael AND age=20 

Есть ли более эффективный способ для этого?

Я скорее волнуюсь за инъекции MySQL - это кажется очень уязвимым. Спасибо!

ответ

20

Как ни странно, название на ваш вопрос в основном является ответом на него. Вы хотите сделать что-то вроде этого, используя Mysqli параметризованных запросов:

$db = new mysqli(<database connection info here>); 
$name = "michael"; 
$age = 20; 

$stmt = $db->prepare("SELECT $fields FROm $table WHERE name = ? AND age = ?"); 
$stmt->bind_param("si", $name, $age); 
$stmt->execute(); 
$stmt->close(); 

Больше информации в mysqli section of the manual, в частности, функции, связанные с MySQLi_STMT.

Заметьте, что я лично предпочитаю использовать PDO над mysqli, мне не нравятся все bind_param/bind_result вещи, которые делает mysqli. Если я должен использовать его, я пишу обертку вокруг него, чтобы он работал больше как PDO.