2016-01-25 68 views
-1

我遇到了PHP脚本的问题,该脚本根据提供的标识符(MAC地址)数组返回一些信息。PHP MySQLi为数组绑定参数

它给了我一个500个未指定的错误。

if (!isset($_POST['macs'])) { 
    echo 'Please enter mac addresses!'; 
    die; 
} 

$mysqli = new mysqli("x", "x", "x", "x"); 

/* check connection */ 
if ($mysqli->connect_error) 
    die("$mysqli->connect_errno: $mysqli->connect_error"); 

$stmt = $mysqli->stmt_init(); 

/* create a prepared statement */ 

$query = "SELECT username, mac FROM user WHERE mac IN (" . str_repeat("?,", count($_POST['macs'])); 
$query = rtrim($query, ","); 
$query = $query . ')'; 

if ($mysqli->prepare($query)) { 

    call_user_func_array(array($stmt, "bind_param"), array_merge(array('s'), $_POST['macs'])); 

    /* execute query */ 
    $stmt->execute(); 

    $result = $stmt->get_result(); 

    while ($row = $result->fetch_assoc()) { 
     echo $row['username']; 
    } 

    /* close statement */ 
    mysqli_stmt_close($stmt); 
} 


mysqli_close($link); 

这就是我通过邮差Chrome应用发布:

macs[0] = 'F0:72:8C:F3:B5:66' 
macs[1] = 'FA:72:8C:F3:B5:66' 

谁能至少暗示我什么是造成问题。我猜这是call_user_func_array电话,但我不确定实际的问题。

+0

那么你的PHP错误日志说? – Martin

回答

0

//如果绑定数组元素来一份声明,该数组必须与所使用的密钥首次宣布:

来到这个问题与动态叫号的mysqli :: bind_param()通过使用PHP Version 5.3+的call_user_func_array()来实现参数,除了使用额外的函数来构建数组元素的引用外,还有另一种解决方法。 您可以使用Reflection来调用mysqli :: bind_param()。

例子:

<?php 
$db  = new mysqli("localhost","root","","tests"); 
$res = $db->prepare("INSERT INTO test SET foo=?,bar=?"); 
$refArr = array("si","hello",42); 
$ref = new ReflectionClass('mysqli_stmt'); 
$method = $ref->getMethod("bind_param"); 
$method->invokeArgs($res,$refArr); 
$res->execute(); 

更多 http://php.net/manual/en/mysqli-stmt.bind-param.php#104073

相关问题