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


Possible to use php tag inside query string?

我有多个值通过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]中生成当前索引的实际值,而不是字面值字符串?是这样吗?我可以不php内的查询字符串,mysql服务器将接受?

让我们说我有一个fooID在我的服务器表是'12345'。即使我设置$vals='12345'并写入:

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

它仍然不工作。我想我的一般问题是:是否有可能在查询字符串中编写/获取变量的值,如果没有,是否有另一种方法来解决我的情况?任何帮助都是感激的。谢谢!

您不应该将未消毒的$_POST ed值放入SQL查询中。研究使用参数化参数和mysql .

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

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

然而,这并不像你想的那样用于数组。

对于数组,您将希望首先使用php的implode()之类的东西将数组转换为字符串。

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

其次,永远不要直接使用$_POST或$_GET或任何客户端传递的查询,因为您可能会受到sql注入的伤害。在php

中清理mysql的数据

好吧,那么应该怎么做(我只说第一个)。第二,没有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
}
}?>

您的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

谢谢你的建议,但事实证明,我的代码没有正确执行,因为语法错误(和额外的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;
}?>