【问题标题】:PHP mysqli Insert not working, but not giving any errorsPHP mysqli插入不起作用,但没有给出任何错误
【发布时间】:2011-02-10 06:40:40
【问题描述】:

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

我的 users 表的字段比这 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 列。

【问题讨论】:

  • 您是否检查过以确保您确实已连接? “SELECT”有效吗?
  • 另外,$username、$password、$newlevel 和 $realname 的值是多少?它们都设置正确了吗?

标签: php mysql insert mysqli


【解决方案1】:

如果您关闭了自动提交,您必须在执行查询后显式调用提交方法。

$stmt->execute();
$db->commit();
$stmt->close();

【讨论】:

    【解决方案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....
    

    【讨论】:

      【解决方案3】:

      检查是否正在打印字符串“任何错误”。如果不是,那么语句:

      if ($stmt = $db->prepare($query))
      

      返回 false。您应该将echo 'Any Errors: '.$db->error.PHP_EOL; 移到条件块之外。

      【讨论】:

        【解决方案4】:

        你是否初始化了 $username, $password, $newlevel, $realname 在 $stmt -> 执行();陈述。否则你必须初始化并尝试

        【讨论】:

        【解决方案5】:
        $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);} 
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-30
          • 1970-01-01
          • 1970-01-01
          • 2017-10-20
          • 2014-04-17
          • 1970-01-01
          相关资源
          最近更新 更多