2013-02-09 63 views
1

用於SQL查詢。PHP SQL GET和OR?

是否可以通過GET傳遞OR?

variable=value OR othervalue 

或者是更容易定義多個變量,然後從多個變量中創建SQL過濾器。

+1

您可以將值作爲數組發送,?value [] =變量和值[] =變量2(正確urlencoded ofcourse) – hank 2013-02-09 14:36:59

+2

我認爲你不知道SQL注入是如何工作,但是它不會做任何傷害 – 2013-02-09 14:39:36

+0

感謝您的快速回復。如果有人知道一種不太容易的方法,那更是一個問題。漢克 - 不幸的是,這種方法不能用我現有的代碼沒有大規模的重寫。 – 2013-02-09 14:39:47

回答

1

你應該通過你的GET參數,像這樣:

script.php?variable[]=happy&variable[]=sad 

在腳本中,這些將被存儲在$_GET[variable]作爲數組:

Array 
(
    [0] => happy 
    [1] => sad 
) 

然後,您可以綁定參數和發送聲明(未經測試):

<?php 
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world'); 

/* check connection */ 
if (!$link) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$type = ''; 

$query = 'SELECT column FROM bubbles WHERE variable IN ('; 

for($i = 0; $i < count($_GET[variable]); $i++) { 
    $query .= '?'; 
    $type .= 's'; 
    if($i+1 < count($_GET[variable])) $query .= ', '; 
} 

$query .= ')'; 

$stmt = mysqli_prepare($link, $query); 

call_user_func_array('mysqli_stmt_bind_param', array_merge(array($stmt, $type), $_GET[variable])); 

/* execute prepared statement */ 
mysqli_stmt_execute($stmt); 

/* close connection */ 
mysqli_close($link); 
?> 
+1

+1:我希望我可以兩次投票,因爲這既是一個堅實的答案,也隱含地解決了注射問題。 – 2013-02-09 15:40:30

+0

請...永遠不要使用未加引號的數組鍵。它依賴於一個可怕的PHP錯誤特性(字符串化未定義的常量)並在每次執行時產生一個E_NOTICE。 – ThiefMaster 2013-02-09 20:21:31

+0

謝謝非常 – 2013-02-11 11:05:29