我在使用 WHERE 子句中的数组进行 SQL 查询时遇到问题。 例子: 我在下面提供了一些示例数组
$a1[0] = "1"
$a1[1] = "2"
$a1[2] = "3"
PHP、SQL 语句。我使用 file_get_contents 和 json_decode 来请求数组数据。
$requestBody = file_get_contents("php://input");
$requestData = json_decode($requestBody,true);
if($requestData){
$invoice_no = $requestData["$a1[]"];
}
$sqlQuery = "SELECT * FROM table WHERE name = '" . $a1[]. "'";
如果我的数组有一百个值,我如何将数组切换为字符串以便能够执行我的代码? 我在 WHERE 子句中出现(数组到字符串转换..)错误。
最佳答案
重要!请参阅答案底部以获得最佳解决方案!
正如我在评论中提到的,您必须循环遍历数组才能检索要用于搜索查询的不同索引。您不能简单地将数组分成搜索字符串并希望获得结果,这就是您收到错误的原因。
为了循环遍历数组,我们必须首先知道数组的长度。
您可以使用 PHP 函数 count();
来实现此目的。
像这样,
//$a being the name of your array
$length=count($a);
我将采用的方法是使用 where 子句构造 SQL。然后,我将创建另一个 SQL,将其连接到前一个 SQL,然后循环遍历数组以使用 OR
语句获取每个索引,从而获取匹配的每个结果。
完整示例:
<?php
$a[0] = 1;
$a[1] = 2;
$a[2] = 3;
$a[3] = 4;
$length=count($a);
$i=0;
$sql="SELECT * FROM table_name WHERE ";
while($length > $i)
{
$sql .="name='$a[$i]' ";
if($i+1 < $length)
{
$sql .= "OR ";
}
$i=$i+1;
}
echo $sql;
?>
输出:
SELECT * FROM table_name WHERE name='1' OR name='2' OR name='3' OR name='4'
希望这有任何用处。
还有其他循环数组的方法,例如 foreach,您还可以选择使用键。
<小时/>最佳答案:
经过一些研究后,我得出一个结论,在有数百个实例的情况下,您可以执行的最佳查询是使用 WHERE IN()
在 SQL 中。
为了实现此目的,我们需要执行 implode();
,这是一个 PHP 函数,它将获取数组并将其转换为字符串。工作方式是在 implode();
中声明一个分隔符,它将成为字符串中数组索引的联合连接。举个例子:
implode(', ', $a);
这将分解您的数组,并生成以下字符串:“1, 2, 3, 4”。
换句话说,我们将您的数组转换为与 SQL 中 IN()
函数的语法相匹配的字符串。
您的查询将如下所示:
$sqlQuery = "SELECT * FROM table WHERE name IN('" . implode( "', '", $a ) . "')";
与 implode();
相反的是 explode();
,您可以使用分隔符将字符串转换为数组。与 implode();
函数的方法相同。
关于php - SQLquery 和 PHP 中的数组到字符串转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50601354/