PHP mysqli插入不工作,但没有给出任何错误

时间:2010-04-20 18:17:11

标签: php mysql insert mysqli

正如标题所说我试图做一个简单的插入,但实际上并没有插入表中。我尝试打印出错误,但没有报告。

我的用户表中包含的字段多于这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列。

5 个答案:

答案 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);} 

试试这段代码。如果查询成功执行,则显示“已成功插入”,否则显示错误。