Ben Dinamik SQL esneklik gibi ve ben Hazırlanan Tabloların güvenlik + gelişmiş performans gibi. Peki ben gerçekten istiyorum bind_param ve bind_result argümanları "sabit" numarayı kabul çünkü yapmak için zahmetli Dinamik Hazırlanmış anlatımlar vardır. Yani bu sorunu aşmanın bir eval () ifadesi kullandı. Ama bu kötü bir fikir olduğu hissine kapılıyorsunuz. Burada ne demek istediğimi örnek kod
// array of WHERE conditions
$param = array('customer_id'=>1, 'qty'=>'2');
$stmt = $mysqli->stmt_init();
$types = ''; $bindParam = array(); $where = ''; $count = 0;
// build the dynamic sql and param bind conditions
foreach($param as $key=>$val)
{
$types .= 'i';
$bindParam[] = '$p'.$count.'=$param["'.$key.'"]';
$where .= "$key = ? AND ";
$count++;
}
// prepare the query -- SELECT * FROM t1 WHERE customer_id = ? AND qty = ?
$sql = "SELECT * FROM t1 WHERE ".substr($where, 0, strlen($where)-4);
$stmt->prepare($sql);
// assemble the bind_param command
$command = '$stmt->bind_param($types, '.implode(', ', $bindParam).');';
// evaluate the command -- $stmt->bind_param($types,$p0=$param["customer_id"],$p1=$param["qty"]);
eval($command);
Bu son eval () deyimi kötü bir fikir mi? Ben değişken adı $ param arkasında değerleri kapsülleştirip kod enjeksiyonu önlemek için çalıştı.
Herkes bir görüş ya da başka bir öneriniz var mı? Ben farkında olması gereken konular var mı?