php - mysqli_prepare 查询返回 false

标签 php mysql database mysqli parameters

我正在尝试使用 call_user_func_array 将参数绑定(bind)到 sql 语句,如 Dynamically Bind Params in Prepared Statements with MySQLi 中所述;但是,我的 mysqli_prepare 一直返回 false。

这里是我调用来存储数据的数据函数:

function storeData($form_data, $table_name, $cxn){
if(!is_array($form_data)){
    return false;
    exit();
}
$types = str_repeat("s", count($form_data));
$params = array();
$params[] = &$types;
$keys = array_keys($form_data);
$values = array_values($form_data);
for ($i = 0; $i < count($values); $i++) {
    $params[] = &$values[$i];
}

$sql = "INSERT INTO $table_name (" . implode(',', $keys) . ") VALUES (" .
    implode(',', array_fill(0, count($values), '?')) . ")
    ON DUPLICATE KEY UPDATE ";
$updates = implode(',', array_map(function($col) {
    return "$col = VALUES($col)";
}, $keys));
$sql .= $updates;

if($stmt = mysqli_prepare($cxn, $sql)){
    call_user_func_array(array($stmt, 'bind_param'), $params);
    return mysqli_stmt_execute($stmt);
}

这是准备时我的 $sql 字符串:

$sql"INSERT INTO interest (Baseball,Basketball,Camping,Canoeing,Cycling,Football,Gaming,Golf,Hiking,Parks,Photography,Runway,Skydiving,Soccer,Username) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE Baseball = VALUES(Baseball),Basketball = VALUES(Basketball),Camping = VALUES(Camping),Canoeing = VALUES(Canoeing),Cycling = VALUES(Cycling),Football = VALUES(Football),Gaming = VALUES(Gaming),Golf = VALUES(Golf),Hiking = VALUES(Hiking),Parks = VALUES(Parks),Photography = VALUES(Photography),Runway = VALUES(Runway),Skydiving = VALUES(Skydiving),Soccer = VALUES(Soccer),Username = VALUES(Username)"

这是我的 $params$key 输出:

$keysarray[15]
$keys[0]"Baseball"
$keys[1]"Basketball"
$keys[2]"Camping"
$keys[3]"Canoeing"
$keys[4]"Cycling"
$keys[5]"Football"
$keys[6]"Gaming"
$keys[7]"Golf"
$keys[8]"Hiking"
$keys[9]"Parks"
$keys[10]"Photography"
$keys[11]"Runway"
$keys[12]"Skydiving"
$keys[13]"Soccer"
$keys[14]"Username"

$paramsarray[16]
$params[0]"sssssssssssssss"
$params[1]"0"
$params[2]"0"
$params[3]"0"
$params[4]"0"
$params[5]"0"
$params[6]"0"
$params[7]"0"
$params[8]"0"
$params[9]"0"
$params[10]"0"
$params[11]"0"
$params[12]"0"
$params[13]"0"
$params[14]"0"
$params[15]"test0613"

$valuesarray[15]
$values[0]"0"
$values[1]"0"
$values[2]"0"
$values[3]"0"
$values[4]"0"
$values[5]"0"
$values[6]"0"
$values[7]"0"
$values[8]"0"
$values[9]"0"
$values[10]"0"
$values[11]"0"
$values[12]"0"
$values[13]"0"
$values[14]"test0613"

最佳答案

我试图映射的列中存在错误,但该列并不存在。发现错误程序here ,这让我产生了 fatal error ,指出我引用的表中不存在一列。

关于php - mysqli_prepare 查询返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44556899/

相关文章:

php - 将 "Buyer Pays on PayPal"与 PHP SOAP SDK 一起使用

mysql - Cloud SQL 上的证书验证

android - 使用 Jaybird 和 Android 时出错

python - 当我在 couchbase 集合之间移动文档时,如何添加移动时间?

php - 数据库中的口音

对 Coinbase Exchange 私有(private) API 的 PHP 身份验证

php - 如何通过 php 从 mysql 获取行/数组/关联结果中的特定值检索行号?

php - PHP和MySQL:mysqli_num_rows()期望参数1为mysqli_result,给定 bool 值

mysql - 存储小时间隔的数据类型

php - 如何按特定列从 mysql 表中获取属性?