在 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');
的操作,因为这些变量是 会话特定的 。这可以解释在您的终端上运行的查询(您实际设置这些变量的地方)而不在您的脚本中运行的查询(您没有设置的地方)。
我有一些表格数据需要确认后写入数据库。我形成了一个查询字符串并将其传递给 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');
的操作,因为这些变量是 会话特定的 。这可以解释在您的终端上运行的查询(您实际设置这些变量的地方)而不在您的脚本中运行的查询(您没有设置的地方)。