2013-02-09 35 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