1

我一直在尝试学习准备好的语句,以便我们可以开始在我们的 PHP 站点中实现它们。此函数使用 $_POST 传输方法从搜索表单上的文本框中获取值(或无),然后使用这些文本框的名称和值将条件添加到 WHERE 子句。该功能以前有效,但我似乎无法使准备好的语句起作用。

研究了几个脚本,我开始使用下面的一个并解决了一些错误。现在当我运行它时,我得到错误错误参数计数 mysqli_stmt::bind_param()

运行此查询后,我想将值导出到表中,并且在尝试准备好的语句之前正在工作。

这是我到目前为止的代码:

  <?php

   $db = mysqli_connec("ip_address", "loginname", "password", "database");

    $refs = array('sssss');

    foreach ($_POST as $key => $value)
     {
       $refs[] =& $_POST[$key];
      }    

$query = "SELECT col1, col2, col3, col4, col5 FROM tbl_name WHERE 1=1";
    foreach ($_POST as $k => $v) 
    { 
      if(!empty($v)) {
        $query .= " AND $k = ?"; 
        $params[$k] = $v;
        }   
    }       

    $results = $db->prepare($query);        

     call_user_func_array(array($results, 'bind_param'), $refs);

    $results->execute();    

?>

4

2 回答 2

3

传递给的参数mysqli_stmt::bind_param必须通过引用传递,并且只有变量可以通过引用传递,所以call_user_func_array在这种情况下不能将函数的结果直接传递给。此外,传递给的第一个参数bind_param是变量类型的字符串列表。相反,试试这个:

// Change to whatever types are relevant
$refs = array('sss');

foreach ($arr as $key => $value)
{
  $refs[] =& $arr[$key];
}

call_user_func_array(array($results, 'bind_param'), $refs);

编辑

这一行是错误的:

$results = $mysqli->prepare($query);

应该

$results = $db->prepare($query);
于 2013-03-29T16:45:59.073 回答
0

好的,我解决这个问题的方法是废弃所有内容并重新开始,这总是很有趣......但是适用于我需要的新脚本就在这里

<?php


$dbhost     = "ip_address";
$dbname     = "db_name";
$dbuser     = "db_login";
$dbpass     = "db_pass"; 

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

    $query = "SELECT * FROM tbl_name WHERE 1=1";

    foreach ($_POST as $k => $v) 
    { 
      if(!empty($v)) {
        $query .= " AND $k LIKE ?";
        $params[] = $v;     
      }  
    }   

    $results = $conn->prepare($query);  
    $results->execute($params);

    $results->bindColumn(1, $no);
    $results->bindColumn(2, $date);
    $results->bindColumn(3, $name);
    $results->bindColumn(4, $id);
    $results->bindColumn(5, $path);

?>
于 2013-04-02T19:25:33.437 回答