在 PHP 中插入时出现 MySqli 错误,但相同的查询字符串在终端中执行正常

MySqli error on insert in PHP, but the same query string executes fine in terminal

我有一些表格数据需要确认后写入数据库。我形成了一个查询字符串并将其传递给 mysqli,但出现错误提示我的主键不能为空。它不为空,查询字符串在 mysql 终端中执行良好。

$query_string = "insert into podnosilac (ime, prezime, jmbg) 
        values (
        aes_encrypt('". $mysqli->real_escape_string($_SESSION["ime"])."', @key_str, @init_vector), 
        aes_encrypt('". $mysqli->real_escape_string($_SESSION["prezime"])."', @key_str, @init_vector),
        aes_encrypt('". $mysqli->real_escape_string($_SESSION["jmbg"])."', @key_str, @init_vector)
)";
if (!$mysqli->query($query_string)) {
        echo $mysqli->error;
}

这是 $query_string 的值,当我在 mysqli->query 行上方回显它时:

insert into podnosilac (ime, prezime, jmbg)
    values ( aes_encrypt('ivana', @key_str, @init_vector), aes_encrypt('corovic', @key_str, @init_vector), aes_encrypt('12345678910', @key_str, @init_vector) )

事实上,当我尝试这一行时:

$mysqli->query("insert into podnosilac (ime, prezime, jmbg)
    values ( aes_encrypt('ivana', @key_str, @init_vector), aes_encrypt('corovic', @key_str, @init_vector), aes_encrypt('12345678910', @key_str, @init_vector) )");

我仍然得到 "Column 'jmbg' cannot be null"。

与aes_encrypt有关。 @key_str 和@init_vector 是在数据库中定义的,也许这不是传递它们的方式?

为什么会这样?

我可以想到两件事:

1) 您没有连接到正确的数据库

2) 当您创建与数据库的连接时,您没有设置这些 mysql 变量。在 mysqli_connect 之后立即执行类似 $mysqli->query('SET @yourvariable := whatever'); 的操作,因为这些变量是 会话特定的 。这可以解释在您的终端上运行的查询(您实际设置这些变量的地方)而不在您的脚本中运行的查询(您没有设置的地方)。