【问题标题】:PHP SQL GET and OR?PHP SQL GET 和 OR?
【发布时间】:2013-02-09 14:35:02
【问题描述】:

用于 SQL 查询。

是否可以通过 GET 传递 OR?

variable=value OR othervalue

或者更容易定义多个变量,然后从多个变量中进行 SQL 过滤。

【问题讨论】:

  • 您可以将值作为数组发送,?value[]=variable&value[]=variable2(当然是正确的urlencoded)
  • 您想实现什么?您可以只传递一个包含所有值的字符串,例如 ?id_list=1,2,3,然后进行解析,或者根据您的数据库,使用任何比较。
  • 我想你不知道 sql 注入到底是如何工作的,但是它不会造成任何伤害
  • 感谢您的快速回复。看看是否有人知道一种晦涩难懂的简单方法,这更像是一个问题。汉克-不幸的是,如果不进行大量重写,这种方法将不适用于我现有的代码。

标签: php sql get


【解决方案1】:

您应该像这样传递GET 参数:

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

在您的脚本中,这些将作为数组存储在$_GET[variable]

数组
(
    [0] => 快乐
    [1] => 伤心
)

然后您可以绑定参数并发送您的语句(尚未测试):

<?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:我希望我可以投票两次,因为这既是一个可靠的答案,也隐含地解决了注入问题。
  • 请...永远不要使用不带引号的数组键。它依赖于一个可怕的 PHP 错误功能(对未定义的常量进行字符串化),并且每次执行此操作都会导致 E_NOTICE。
猜你喜欢
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2012-04-08
相关资源
最近更新 更多