2013-11-24 60 views
1

如何綁定未知數量的參數與Mysqli?例如,我的代碼如下:Mysqli綁定 - 未知數量的參數

<?php 
include 'config.php'; 
$query = "SELECT * FROM table WHERE"; 
if(isset($_POST['r1'])) 
    $query = $query." id = '$_POST['r1']'"; 
if(isset($_POST['r2'])) 
    $query = $query." AND par2 = '$_POST['r2']'"; 
$e = mysqli_prepare($conf, $query); 
?> 

如何進行參數綁定?

+0

你不應該使用'isset'。改爲使用'!empty'。 – DevlshOne

+3

@DevlshOne在這種情況下'isset'是正確的選擇。假設這些'$ _POST'變量之一是0?這是一個合法的值,但是爲此,empty()會返回錯誤的值。 – 2013-11-24 20:06:48

+0

使用'empty'來檢查表單數據通常是不好的選擇。 'isset'意味着聲明和定義的變量,並且由於表單數據是字符串類型,其中空字符串仍然被認爲是定義變量,所以'isset'是正確的選擇。 – brezanac

回答

1

準備的陳述可能不是最好的方式來做到這一點。您可以像您一樣組裝查詢,只要您確保自己逃脫了任何用戶輸入。例如:

<?php 

// assuming $db is a mysqli object 

$query = "SELECT * FROM table WHERE"; 
if(isset($_POST['r1'])) 
    $query = $query."id = '".$db->real_escape_string($_POST['r1'])."'"; 
if(isset($_POST['r2'])) 
    $query = $query." AND par2 = '".$db->real_escape_string($_POST['r2'])."'"; 

$result = $db->query($query); 
?> 

不要忘記添加任何所需的錯誤檢查。

+0

有沒有辦法?因爲我想使用綁定... – user3022323

+0

準備好的語句在本網站上大肆渲染,因爲防禦SQL注入的方式忽略了許多邊緣情況,其中準備的語句不必要,笨拙或無法使用。這是一。假如你在逃避你的輸入時充分小心,沒有理由說一個簡單的查詢不應該是完全安全的。 – 2013-11-24 20:26:31

+1

@ user3022323使用PDO,您*可以*使用準備好的語句。切換到PDO是您的一個選擇嗎? –