数组转换为字符串... SQLquery和PHP

时间:2018-05-30 09:39:26

标签: php mysql arrays

我在使用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[]. "'";

如果我的数组有100个值,我怎样才能将数组切换到字符串以便能够执行我的代码? 我在WHERE子句中有(Array to string conversion ..)错误。

1 个答案:

答案 0 :(得分:1)

重要!请参阅答案底部以获得最佳解决方案!

正如我在评论中提到的,您必须循环遍历数组以检索您要用于搜索查询的不同索引。你不能简单地将数组块组成一个搜索字符串,并希望得到结果,这就是你得到错误的原因。

为了遍历你的数组,我们必须首先知道数组的长度。 您可以使用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,你也可以选择使用键。

最佳答案:

在做了一些研究之后,我得出一个结论,即在你有数百个实例的情况下可以做的最佳查询是在SQL中使用WHERE IN()

为了实现这一点,我们需要执行implode();这是一个PHP函数,它将获取您的数组,并将其转换为字符串。可行的方法是,在implode();中声明一个分隔符,它将成为字符串中数组索引的联合连接。举个例子:

implode(', ', $a);

这将分解您的数组,并生成以下字符串:“1,2,3,4”。

换句话说,我们将您的数组转换为与SQL中IN()函数的语法相匹配的字符串。

您的查询将如下所示:

$sqlQuery = "SELECT * FROM table WHERE name IN('" . implode( "', '", $a ) . "')";

implode();相反的是explode();,您可以使用分隔符将字符串转换为数组。与implode();函数相同的方法。