php - SQLquery 和 PHP 中的数组到字符串转换

标签 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[]. "'";

如果我的数组有一百个值,我如何将数组切换为字符串以便能够执行我的代码? 我在 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/

相关文章:

php - 如何使用动态数组中的值进行 sql 查询?

mysql ORDER BY with CASE - 太慢,更快的方法?

mysql - 如何从oracle中的长字符串名称列中获取日期

python - 具有多个输入的 Keras 顺序模型

C++ 如何删除本地分配的字符数组?

php - 为什么 laravel 中 get() 函数的返回值在检查 is_array 时不是数组

php - 时间函数计算不正确

php - 无法插入到我的 MYSQL 表中

php - 从复选框中获取数组,然后在 PHP 中创建一个字符串

mysql - 为什么它只在 JSONiq 中返回最后一个元素?