正如标题所说我试图做一个简单的插入,但实际上并没有插入表中。我尝试打印出错误,但没有报告。
我的用户表中包含的字段多于这4个字段,但它们都应该默认。
$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)';
if($stmt = $db -> prepare($query))
{
$stmt -> bind_param('ssis', $username, $password, $newlevel, $realname);
$stmt -> execute();
$stmt -> close();
echo 'Any Errors: '.$db->error.PHP_EOL;
}
没有给出错误,但是当我在phpmyadmin中查看表时,没有添加新行。我确信这些类型是正确的(字符串和整数)。这里有什么问题,或者它与我忽略其他列的事实有关。我在用户表中有大约8列。
答案 0 :(得分:6)
如果您关闭了自动提交,则必须在执行查询后显式调用commit方法。
$stmt->execute();
$db->commit();
$stmt->close();
答案 1 :(得分:2)
您必须在流程的每个阶段检查错误:连接时,准备语句时,绑定时,执行时以及关闭时。在您的代码中,假设正确创建了$db
句柄,则在->close()
调用之后进行错误检查,这应该会成功,因此此时不会出现任何错误。
沿着这些方向的东西将显示事情爆发的地方:
$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)';
$stmt = $db->prepare($query);
echo 'prepare error: ', $db->error, PHP_EOL;
$stmt->execute();
echo 'execute error: ', $db->error
etc....
答案 2 :(得分:1)
检查是否正在打印字符串“Any Errors”。如果没有,那么声明:
if ($stmt = $db->prepare($query))
返回false。您应该将echo 'Any Errors: '.$db->error.PHP_EOL;
移出条件块之外。
答案 3 :(得分:1)
你是否在之前初始化$ username,$ password,$ newlevel,$ realname的值 $ stmt - >执行();声明。否则你必须初始化并尝试
答案 4 :(得分:1)
$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)';
if($stmt = $db -> prepare($query)){
$stmt -> bind_param('ssis', $username, $password, $newlevel, $realname);
$username='testname';$password='testpwd';$level=5;$realname='testrealname';
$stmt -> execute(); echo "inserted SuccessFully"; $stmt -> close(); }
else { printf("Prepared Statement Error: %s\n", $mysqli->error);}
试试这段代码。如果查询成功执行,则显示“已成功插入”,否则显示错误。