Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli准备好的语句-非空变量出现空错误?_Php_Mysqli_Prepared Statement - Fatal编程技术网

Php mysqli准备好的语句-非空变量出现空错误?

Php mysqli准备好的语句-非空变量出现空错误?,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,最后开始学习准备好的陈述。在尝试运行一对简单插入时,我遇到了一个令人恼火的错误: $p_stmt = $mysqli->prepare("INSERT INTO ww_pages (page_key) VALUES (?)"); $p_stmt->bind_param('s', $page_key); $p_stmt->execute(); $pv_stmt = $mysqli->prepare("INSERT INTO ww_page_versions (page_i

最后开始学习准备好的陈述。在尝试运行一对简单插入时,我遇到了一个令人恼火的错误:

$p_stmt = $mysqli->prepare("INSERT INTO ww_pages (page_key) VALUES (?)");
$p_stmt->bind_param('s', $page_key);
$p_stmt->execute();

$pv_stmt = $mysqli->prepare("INSERT INTO ww_page_versions (page_id, page_title, page_content, version_notes, version_timestamp) VALUES (?, ?, ?, ?, ?)");
$pv_stmt->bind_param('issss', $p_stmt->insert_id, $page_title, trim($_POST["page_content"]), trim($_POST["version_notes"]), date("Y-m-d H:i:s"));
$pv_stmt->execute();
echo $pv_stmt->error;
echo$pv\u stmt->错误
给出此错误:
列“page\u id”不能为空

我确信您可以解释,我正在尝试分配第一条语句的插入id。我100%确定这个值是非空的,并且返回一个整数值。我直接用这个测试了它:

echo "NEW ID: ".$p_stmt->insert_id."::".is_int($p_stmt->insert_id);
输出<代码>新ID:13::1

我做错了什么?为什么当列不为空时,我会得到“列不能为空”?我能在网上找到的唯一解决方案是涉及意外的空值。

尝试以下方法:

$p_stmt = $mysqli->prepare("INSERT INTO ww_pages (page_key) VALUES (?)");
$p_stmt->bind_param('s', $page_key);
$p_stmt->execute();
$aux = $p_stmt->insert_id; //just this aux var an replace it in the second insert
$pv_stmt = $mysqli->prepare("INSERT INTO ww_page_versions (page_id, page_title, page_content, version_notes, version_timestamp) VALUES (?, ?, ?, ?, ?)");
$pv_stmt->bind_param('issss', $aux, $page_title, trim($_POST["page_content"]), trim($_POST["version_notes"]), date("Y-m-d H:i:s"));
$pv_stmt->execute();
试试这个:

$p_stmt = $mysqli->prepare("INSERT INTO ww_pages (page_key) VALUES (?)");
$p_stmt->bind_param('s', $page_key);
$p_stmt->execute();
$aux = $p_stmt->insert_id; //just this aux var an replace it in the second insert
$pv_stmt = $mysqli->prepare("INSERT INTO ww_page_versions (page_id, page_title, page_content, version_notes, version_timestamp) VALUES (?, ?, ?, ?, ?)");
$pv_stmt->bind_param('issss', $aux, $page_title, trim($_POST["page_content"]), trim($_POST["version_notes"]), date("Y-m-d H:i:s"));
$pv_stmt->execute();

如果你使用一个辅助值,比如:$aux=$p\u stmt->insert\u id;在第二次插入时使用$aux?真不敢相信这会奏效。为什么aux变量可以解决这个问题?这是范围问题吗?如果你把它作为一个答案,我会接受。是的,这是一个范围问题…当你执行第二次执行时,上一个insert_id丢失了。如果你使用aux val…比如:$aux=$p_stmt->insert_id;在第二次插入时使用$aux?真不敢相信这会奏效。为什么aux变量可以解决这个问题?这是范围问题吗?如果您将其作为答案发布,我将接受。是的,这是一个范围问题…当您执行第二次执行时,上一个insert_id将丢失。谢谢!最简单的解决方案往往最令人沮丧。谢谢!最简单的解决方案往往最令人沮丧。