在php mysql查询中添加更多搜索变量时遇到问题

在php mysql查询中添加更多搜索变量时遇到问题,php,mysql,sql,params,isset,Php,Mysql,Sql,Params,Isset,我正在尝试添加到mysql搜索数组$。实际脚本在如下情况下运行良好: $sql = 'SELECT item, IdPhotos FROM purchases WHERE username = ? AND sname = ?'; $params = array( $login, $sname ); if ( isset( $_GET['q'] ) ) { $sql .= " AND cusername LIKE ?"; $params []= '%'.$_GET['q'].'%'; }

我正在尝试添加到mysql搜索数组$。实际脚本在如下情况下运行良好:

$sql = 'SELECT item, IdPhotos FROM purchases WHERE username = ? AND sname = ?';
$params = array( $login, $sname );

if ( isset( $_GET['q'] ) ) {
  $sql .= " AND cusername LIKE ?";
  $params []= '%'.$_GET['q'].'%';
}
然而,我试图添加两个以上的搜索变量。然而,我的脚本告诉我第14行有一个未知错误。我做错了什么

   ...
    if ( isset( $_GET['q'] ) ) {
      $sql .= " AND (cusername LIKE ? OR myname LIKE ? OR item LIKE ?)";
 //line 14 below 
      $params []= '%'.$_GET['q'].'%';                                                        
    }

添加的参数数量与添加参数符号的数量不同

这是你的解决方案,尽管有点草率。在这种情况下,您应该转换为命名参数

if ( isset( $_GET['q'] ) ) {
    $sql .= " AND (cusername LIKE ? OR myname LIKE ? OR item LIKE ?)";

    $params[] = '%'.$_GET['q'].'%';                                                        
    $params[] = '%'.$_GET['q'].'%';   
    $params[] = '%'.$_GET['q'].'%';   
}
使用命名参数将如下所示:

if ( isset( $_GET['q'] ) ) {
    $sql .= " AND (cusername LIKE :name OR myname LIKE :name OR item LIKE :name)";

    $params[':name'] = '%'.$_GET['q'].'%';                                            
}

这样,它将自动替换命名参数的每个实例。

如果您在接收错误时需要帮助,您也需要发布这些错误。但是,在if(isset)部分中,您正在使用添加三个参数?并且只向$params数组中添加单个项。您必须在参数中为每个?你有索引。这是
$params
的问题哦,我明白了。谢谢非常有用。