Вам не нужны подготовленные операторы и связанные аргументы, потому что вы всегда можете использовать mysql_real_escape_string (). И ты прав; динамически генерируемый SQL гораздо более гибкий и ценный.
Вот простой пример использования обычного интерфейса mysql_ *:
// Array of WHERE conditions
$conds = array("customer_id" => 1, "qty" => 2);
$wherec = array("1");
foreach ($conds as $col=>$val) $wherec[] = sprintf("`%s` = '%s'", $col, mysql_real_escape_string($val));
$result_set = mysql_query("SELECT * FROM t1 WHERE " . implode(" AND ", $wherec);
Конечно, это упрощенный пример, и для того, чтобы сделать его полезным, нужно много его построить и усовершенствовать, но он показывает идеи и действительно очень полезен. Например, вот совершенно универсальная функция для вставки новой строки в произвольную таблицу со столбцами, заполненными значениями из ассоциативного массива и полностью безопасными для инъекций SQL:
function insert($table, $record) {
$cols = array();
$vals = array();
foreach (array_keys($record) as $col) $cols[] = sprintf("`%s`", $col);
foreach (array_values($record) as $val) $vals[] = sprintf("'%s'", mysql_real_escape_string($val));
mysql_query(sprintf("INSERT INTO `%s`(%s) VALUES(%s)", $table, implode(", ", $cols), implode(", ", $vals)));
}
// Use as follows:
insert("customer", array("customer_id" => 15, "qty" => 86));