Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL绑定语句情况_Php_Mysql_Binding - Fatal编程技术网

PHP MySQL绑定语句情况

PHP MySQL绑定语句情况,php,mysql,binding,Php,Mysql,Binding,我必须在我的应用程序中创建一个web服务,以便使用PHP从MySQL数据库中提取数据。我不知道我想做的事情是否有效,因为我是PHP新手。代码如下: $queryString = "SELECT uniqueID, address FROM main WHERE (state = ?) AND (propType IN (?)"; $stmt = mysqli_prepare($this->connection, $queryString); mysqli_stmt_bind_par

我必须在我的应用程序中创建一个web服务,以便使用PHP从MySQL数据库中提取数据。我不知道我想做的事情是否有效,因为我是PHP新手。代码如下:

$queryString = "SELECT uniqueID, address FROM main WHERE (state = ?) AND (propType IN (?)";
$stmt = mysqli_prepare($this->connection, $queryString);    
mysqli_stmt_bind_param($stmt, 'ss', $itemst, $itempt);
mysqli_stmt_execute($stmt);
我的问题与数据库的propType列的binding语句有关。在我的应用程序中,有8种不同的属性类型,用户可以单击复选框进行搜索。我想做的是将字符串缝合到一个上面用$itempt表示的值中,然后将这个字符串绑定到SQL语句,但我不知道我是否能做到这一点

如果我不能,那么我必须做以下事情:

$queryString = "SELECT uniqueID, address FROM main WHERE (state = ?) AND (propType IN (?,?,?,?,?,?,?,?)";
这在绑定表达式中可能会变得复杂,因为我必须测试选择了哪些属性类型,并提出各种不同的查询/绑定表达式,这将是一项艰巨的任务

所以我的问题是,使用“IN”子句,我可以将所有字符串值缝合到一个逗号分隔的字符串中,然后将这个值绑定到我的查询,还是必须为每个可能的值传递一个单独的变量并分别绑定到它们


谢谢你的洞察力

我编辑了我的答案,因为它不起作用,我用PDO风格重新编写了代码片段并进行了测试(只是使用了不同的表模式)

这是:

$servername = "localhost";
$username = "user";
$password = "pass";
$db = "stackoverflow";

try{
    $con = new PDO("mysql:host=$servername;dbname=$db", $username, $password);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // set this if you want to bind LIMIT values

}catch(PDOException $e){
    $error =  "Connection failed: " . $e->getMessage();
}

$itemst = ['active']; // cast search parameters as array so you can merge them
// watch the order in which you bind them! Else you will never find matching entries
$container = ['some title 1','some title 3','some title 5'];
$limit = [0,2];
$params = array_values(array_merge($itemst,$container,$limit));
$bindStr = implode(",", array_map(function($val) { return "?"; }, $container));
$queryString = "SELECT course_title FROM mysqli_quick WHERE state = ? AND course_title IN ({$bindStr}) LIMIT ?,?";

$stmt = $con->prepare($queryString);

$stmt->execute($params);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($result);
印刷品

array (size=3)
  0 => 
    array (size=1)
      'course_title' => string 'some title 1' (length=12)
  1 => 
    array (size=1)
      'course_title' => string 'some title 3' (length=12)

我是PHP新手,所以不得不对您的回答做一些研究,但这个解决方案在我看来非常棒。如果我理解正确,我必须将一个搜索参数数组传递给PHP,这些参数将映射到一个与搜索参数数量匹配的问号字符串,然后我循环遍历它们并分别绑定每个值。这是正确的吗?这也适用于字符串数组而不是整数吗?当然可以。您还可以使用strings.Yolo,尽管您的解决方案看起来是有效的解决方案,但mysqli似乎不允许您按照建议的方式在多个语句上绑定参数。我收到错误“mysqli_stmt_bind_param():变量数量与准备语句中的参数数量不匹配”。您是否确定可以按照您建议的方式跨多个语句绑定参数?我非常确定这是可能的。您甚至可以这样做
调用_user_func_数组(array($stmt,'bind_param'),$params)此错误通常表示您的问号计数与绑定的参数数不匹配。检查是否确实有不匹配的计数?通过打印$queryString和计算问号,以及计算您通过的$params数量,包括$itemst和您可能拥有的任何其他$params。可能您也可以在绑定之后和执行之前打印$stmt,并查看任何不匹配的计数。我可能会尝试一下,但我不知道call_user_func_数组是否有效,因为您没有传入变量类型的字符串。ie'sssid',所以我不知道绑定是否能正常工作。如果我将变量类型字符串作为第一个参数传入,也许会是这样???网络上有人建议,在这种情况下,PDO是我们在这里做的更好的选择,所以我也可以考虑一下。