通过php脚本将逗号分隔值传递给sql查询

时间:2013-01-26 02:46:21

标签: php sql arguments comma

我正在使用以下格式的网络浏览器向我的php代码传递一个参数:

www.site.php?age=1&sex=2

然后在访问这些参数的代码中:

'age' => $_GET['age']
'sex' => $_GET['sex']

一个参数需要是一组逗号分隔值(即“1,2,3,4,5”)。当我执行以下操作时,只会解释第一个值:

www.site.php?age=1&sex=2&nums=1,2,3,4,5

我尝试过用parens,括号等来破坏代码。有什么想法吗?谢谢,

编辑:错误发生时我错误地假设了。尝试实际进行sql调用时发生错误:

这有效:

$sql = <<<SQL
    SELECT * from db
    WHERE age=:age AND nums in (1,2)
SQL;
$query = $dbs['base']['connection']->prepare($sql);

$query->execute(array(
    ':age'      => $_GET['age'],

));

但是当我传入内心时它失败了:

$sql = <<<SQL
    SELECT * from db
    WHERE age=:age AND nums in (:nums)
SQL;
$query->execute(array(
        ':age'      => $_GET['age'],
            ':nums'  => $_GET['nums']
    ));

当我打印$ _GET ['nums']时,逗号分隔值就可以了。如何正确地将'nums'参数传递给sql查询?

5 个答案:

答案 0 :(得分:1)

你试过urlencode吗?

// set
$nums = urlencode(join(',', array(1,2,3,4,5)));

// get
$nums = explode(',', urldecode($_GET['nums']));
// i think needs sanitize
$nums = array_map('intval', $nums);

答案 1 :(得分:0)

如果你想要一个字符串,URL会对逗号进行编码吗?

www.site.php?age=1&sex=2&nums=1%2C2%2C3%2C4%2C5

此外,HTTP具有PHP可以自动解释的参数的数组格式。我忘记了语法,但它非常简单。

编辑2:没关系,你想要字符串。

答案 2 :(得分:0)

不清楚为什么这样的测试不适合你。请注意,<pre>print_r()严格用于调试。 explode(',', $_GET['nums'])是关键。

echo '<pre>';
$nums_array = explode(',', $_GET['nums']);
print_r($nums_array);
echo '</pre>';

也许您需要与我们分享部分解析代码才能更好地理解?

答案 3 :(得分:0)

在发送页面上将逗号转换为更友好的内容

$nums = "1,2,3,4,5";
$nums = str_replace(',','|',$nums);

在接收GET的页面中,执行以下操作:

$nums = str_replace('|',',',$nums);

答案 4 :(得分:0)

使用您当前的数据库界面,您不能。它使用预准备语句。您的列表将转换为字符串,因此不再是IN子句的值列表。

这就是为什么我要使用这样的东西:

db("SELECT * from t1 WHERE id=? AND x IN (??)", $id, $array);

然而,您必须手动创建一些?,?,?,?,?占位符 1 ,具体取决于输入列表长度(在提到的爆炸后,或更好的str_getcsv拆分)。是的,你需要枚举参数,而不是:命名参数。

1 正是因为它无聊/乏味我才在这里提供示例代码。