gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:38:15 27 4
gpt4 key购买 nike

我正在使用准备好的语句将文章写入数据库。有一些可选字段,如果留空,则不应将其写入数据库。这就是为什么我想使用动态准备的语句。我已经在这里找到了一些答案,一般来说,解决方案是使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com