php - 动态生成的 MySQLI 准备好的语句不起作用

标签 php mysqli

我正在使用准备好的语句将文章写入数据库。有一些可选字段,如果留空,则不应将其写入数据库。这就是为什么我想使用动态准备的语句。我已经在这里找到了一些答案,一般来说,解决方案是使用 call_user_func_array() 。但这似乎不起作用。

代码:

//generating query
$art_str = 'INSERT INTO table SET ';
$art_str.= 'col1=?';
$art_str.= ', col2=?';
$art_str.= ', col3=?';

$art_stmt_params = array(); //array with parameters for binding
$art_stmt_params[] = 'sss'; //$types

//obligated parameters (already been checked)
$art_stmt_params[] = $_POST['par1'];
$art_stmt_params[] = $_POST['par2'];
$art_stmt_params[] = $_POST['par3'];

//$articleParagraphs is an Array. Correctly generated and checked
if(isset($articleParagraphs)){
    $art_str.= ', col4=?'; //expanding query
    $art_stmt_params[0].= 's'; //adding type
    $art_stmt_params[] = json_encode($articleParagraphs); //adding parameter to array
}

if(!empty($_POST['par5'])){
    $art_str.= ', col5=?';
    $art_stmt_params[0].= 's';
    $art_stmt_params[] = $_POST['par5'];
}

if(!empty($_POST['par6'])){
    $art_str.= ', col6=?';
    $art_stmt_params[0].= 's';
    $art_stmt_params[] = $_POST['par6'];
}

$art_stmt = $mysqli->prepare($art_str); //$mysqli is correct
call_user_func_array(array($art_stmt, 'bind_param'), $art_stmt_params);

$art_stmt->execute();
$art_stmt->close();

上面的代码不会产生任何错误。并且上面代码后面的代码也能正确执行。但数据库中没有写入任何内容。一切都是正确的:列名、表名、数据库连接、发布的参数。然而,当我对 call_user_func_array() 执行 var_dump() 时,它会打印 NULL。此外,我还在同一页面上使用前面准备好的语句,将一些元数据写入数据库。由于这里的参数始终相同,因此我在这里没有使用动态准备语句,而是使用 $stmt->bind_param(...)。我希望你能帮助我解决这个问题。谢谢!

ps。这是我第一次使用准备好的语句(自从我使用 sql 以来已经有一段时间了)

最佳答案

代表 OP 发布:

我已经成功修复了这个问题,方法是为可选参数和 $art_stmt->bind_param(.. .)。现在可以了。我仍然不知道为什么 call_user_func_array() 不起作用。

关于php - 动态生成的 MySQLI 准备好的语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21995795/

相关文章:

javascript - 如何使用 jQuery 隐藏

php - 在 mysql 数据库中插入多个字符串的更好方法

java - "Best"具有 ODBC 和套接字的基于浏览器的应用程序的语言/架构? (主观)

php - 创建哈希以与 Oracle DBMS_UTILITY.get_hash_value 匹配

PHP/MySQL SELECT LIMITER 问题

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

php - 只显示登录用户的记录

php - 组合 SELECT 和 UPDATE 以避免重复选择

php - PhpStorm中如何设置SSH代理用户连接MySQL?

php - 从单独的表 laravel 中引用 2 列的列