可以在查询字符串中使用php标签吗?

时间:2013-06-02 22:59:28

标签: php html sql

我有多个值通过POST表单(从上一页的多个复选框)传递,我将它们存储到数组$ vals中。现在我想编写一个查询字符串(在while循环中),根据循环中的距离,生成稍微不同的查询。

<?php
$vals=($_POST['selectedIDs']);
$i=0;
while($vals[$i] != NULL){
$query = "SELECT * FROM List foo WHERE foo.fooID = echo $vals[$i]";
$result = mysqli_query($link, $query);
if($result) echo "YES IT WORKS!";                   
$i += 1;
}?>

但它似乎没有这种方式?我认为通过使用双引号进行查询,

echo $vals[$i]

会在$ vals [$ i]中生成当前索引的实际值而不是文字字符串吗?这是发生了什么?我可以在mysql服务器接受的查询字符串中没有php吗?

我只想说我的服务器表中的fooID为'12345'。即使我设置$ vals ='12345'并写:

$query = "SELECT * FROM List foo WHERE foo.fooID = $vals";
$result = mysqli_query($link, $query);
if($result) echo "YES IT WORKS!";

它仍然不起作用。我想我的一般问题是:是否有可能在查询字符串中写入/获取变量值,如果没有,是否还有另一种解决方案?任何帮助表示赞赏。谢谢!

4 个答案:

答案 0 :(得分:1)

您不应将未经过清理的$_POST ed值放入SQL查询中。请查看使用paramaterized arguments and mysqli

您可以使用以下语法输出变量:

$myVar = 'toast';
$combined = "I like $myVar";

但是,这对于数组来说无法正常工作。

对于一个数组,你会想要使用像php implode()之类的东西来首先将你的数组转换为字符串。

答案 1 :(得分:1)

首先永远不要在循环中进行查询。

其次,从不使用直接$ _POST或$ _GET或任何客户端传入查询,因为您可能会受到sql注入的伤害。wiki以及clearing data for mysql in php

好的,应该怎么做(我只说第一个。第二个我不知道怎么做没有oop)。

<?php
$vals=($_POST['selectedIDs']);
$vals = implode(',',$vals);
$query = "SELECT * FROM List foo WHERE foo.fooID IN ($vals)";
$result = mysqli_query($link, $query);

while ($row = mysqli_fetch_row($result)) {
     echo "YES IT WORKS!";  
     var_dump($row); //you will see all the data in one row
}
}?>

答案 2 :(得分:0)

您的SQL字符串中有一个额外的回显:

$query = "SELECT * FROM List foo WHERE foo.fooID = echo $vals[$i]";

应该是:

$query = "SELECT * FROM List foo WHERE foo.fooID = $vals[$i]";

通常,从用户输入构造SQL字符串是一个不错的想法。请改用预备语句。点击此处查看有关准备好的陈述的更多信息:

http://php.net/manual/en/pdo.prepared-statements.php

答案 3 :(得分:0)

谢谢你们的建议,但事实证明,由于语法错误(以及额外的echo语句),我的代码无法正确执行。我原来的代码在$ vals [$ i]附近缺少引号。这是一个mysql语法错误,因为它不接受foo.fooID = 12345但是foo.fooID ='12345'。这是解决它的最终代码

<?php
$vals=($_POST['selectedIDs']);
$i=0;
while($vals[$i] != NULL){
$query = "SELECT * FROM List foo WHERE foo.fooID = '$vals[$i]'";
$result = mysqli_query($link, $query);
if($result) echo "YES IT WORKS!";                   
$i += 1;
}?>