查询连接时php数组到字符串转换错误

查询连接时php数组到字符串转换错误,php,arrays,string,laravel,Php,Arrays,String,Laravel,//拉威尔码 这是我的php代码我没有得到什么是错误和在哪里,请任何人帮助我 static function getall($input) { $sql = "SELECT * FROM radio_city"; $where = []; $params = []; if ($input['city']) { $where[] = "city = ?"; $params[] = $input['city']; } el

//拉威尔码 这是我的php代码我没有得到什么是错误和在哪里,请任何人帮助我

static function getall($input) { 
    $sql = "SELECT * FROM radio_city";
    $where = [];
    $params = [];
    if ($input['city']) {
        $where[] = "city = ?"; 
        $params[] = $input['city']; 
    } else { 
        $where = ''; 
    } 
    $sql .= $where; 
    $sql .= "\nGROUP BY city"; 
    //echo $sql; 
    return DB::select($sql, $params);     
}
这:

与此相矛盾的是:

if ($input['city']) { ....
什么是$input?它是一个数组吗?它是一根绳子吗?如果它是一个数组,正如我所怀疑的和第二行所建议的,那么错误将出现在第一行,您可能希望:

$sql = "SELECT * FROM radio_city WHERE city=" . $input['city'];
…尽管第二行表明您不确定$input['city']是否存在。顺便说一句,最好在此处使用empty()

因为您所做的是尝试评估它看起来是什么,所以您打算将字符串作为布尔值


正如乌特卡诺斯评论的那样,哇!格式化代码,更全面地考虑逻辑。在将$input['city']连接到字符串后,担心$input['city']是否存在没有多大意义…

$where
都是数组,您试图强制字符串连接

有问题的台词是

$sql=“从无线电城市选择*”。$input=“

$sql.=$where

我不确定您想做什么,但在我看来,您应该删除存根SQL查询中“WHERE”之后的所有内容

此外,您还必须决定
$where
的数据类型,在这两种情况下,您都不需要将
$where
设置为空字符串的
else
块。因此,要么将
$where
初始化为空字符串并将每个条件与and/OR连接起来,要么初始化为数组并推送and/OR条件,然后在连接到存根之前内爆

编辑:只是在黑暗中拍摄你正在寻找的

static function getall($input) {
    $where  = [];
    $params = [];
    $sql    = 'SELECT * FROM radio_city';

    if (isset($input['city']) && $input['city']) {
        $where[] = ' city = ?'; // Subsequent additions to $where should specify AND/OR conditional
        $params[] = $input['city']; 
    }

    $sql .= implode(',', $where); 
    $sql .= " GROUP BY city"; 

    return DB::select($sql, $params);     
}

未经测试。但不要只是复制和粘贴。如果它有效,很好,但请查看更改的内容,并尝试真正理解更改的原因,如果您不知道,请在此处询问。

哇,格式化您的代码。正如错误所说,您似乎正在尝试用字符串连接数组。检查变量的类型。这是一个非常基本的错误,您的代码似乎尝试做同样的事情两次,两次都不正确。解释你想做什么,因为仅仅在字符串末尾添加一个数组是行不通的。我是php新手,所以任何人都可以修改代码,这样我就可以理解我从select标记中获取的输入是什么以及如何通过该输入将其传递到这里来浏览数据库。谢谢,这是个错误,但我已经修改了代码。你能检查一下并给出一个答案吗解决方案卡洛斯告诉过你。但是,真的,阅读代码,运行一些测试,使用var_dump()-如果你自己不调试这些东西,你将永远不会前进。谢谢你的帮助,我明白了。真的我很高兴得到这个答案,非常感谢你
if ( ! empty($input['city'])) { ....
static function getall($input) {
    $where  = [];
    $params = [];
    $sql    = 'SELECT * FROM radio_city';

    if (isset($input['city']) && $input['city']) {
        $where[] = ' city = ?'; // Subsequent additions to $where should specify AND/OR conditional
        $params[] = $input['city']; 
    }

    $sql .= implode(',', $where); 
    $sql .= " GROUP BY city"; 

    return DB::select($sql, $params);     
}