【问题标题】:Prepared statement didn't execute准备好的语句没有执行
【发布时间】:2014-11-11 14:12:35
【问题描述】:

我有一个简单的带有 PHP 后端的 Web 应用程序。我尝试了三个小时,但无法解决问题。

我的代码如下:

1. db_connect.php

<?php

define("HOST", '127.0.0.1');
define("USER", 'root');
define("PASSWORD", '');
define("DB", 'tourist guide');


$con = new mysqli(HOST,USER,PASSWORD,DB);

if ($con->connect_errno){
    die("Database Connection Failed");
    exit();    
}

2。 index.php

<?php

require_once 'db_connect.php';

$response = array();       
$result = "";
   

if (isset($_POST['firstname']) && isset($_POST['lastname']) && isset($_POST['email'])&& isset($_POST['password'])) {
 
    $firstname = $_POST['firstname'];       
    $lastname = $_POST['lastname'];     
    $email = $_POST['email'];       
    $password = $_POST['password'];    

    $stmt = $con->prepare("INSERT INTO 
                                      user_accounts
                                      (first_name,last_name,email,password)
                                VALUES
                                      (?,?,?,?)");
                
    echo 'prepared statement executed. ';
                        
    $stmt->bind_param('ssss', $firstname, $lastname, $email, $password); 
                
    echo 'values given. ';

    $result = $stmt->execute();
            
    echo 'statement is executed. ';
                              
    $stmt->close();

}
    
if ($result) {

    $response["success"] = 1;
    $response["message"] = "account successfully created.";
    echo json_encode($response);
            
} else {
        
    $response["success"] = 0;
    $response["message"] = "An error occurred during registration.";
    echo json_encode($response);
}
     

?>

输出如下:

prepared statement executed. values given. statement is executed. {"success":0,"message":"An error occurred during registration."}

只有错误必须是$result = $stmt-&gt;execute();。我在这里错了吗?还是错误是别的?请帮忙。

更新:

从我添加的弗雷德的评论中:

if(!$stmt->execute()){trigger_error("there was an error....".$con->error, E_USER_WARNING);} 

现在他出现了真正的错误:

Cannot add or update a child row: a foreign key constraint fails

看起来错误在我的数据库外键中...稍后我会解决它..如果您现在知道错误,请告诉我...谢谢 fred。

【问题讨论】:

  • 似乎您关闭数据库连接太快了。将$stmt-&gt;close(); 放在echo json_encode($response); 之后
  • @Fred-ii- 那么我应该把 $stmt->close(); 放在哪里?
  • 就在您关闭 ?&gt; 标记之前。还要确保您的表单元素都具有名称属性。在您打开 &lt;?php 标记 error_reporting(E_ALL); ini_set('display_errors', 1); 后立即将错误报告添加到文件顶部,看看它是否产生任何结果。
  • @Fred-ii- umm.. 仍然显示相同的输出
  • 我正在写一篇。

标签: php mysql mysqli prepared-statement


【解决方案1】:

根据 OP 希望关闭问题,看到错误已被发现。

您似乎过早地关闭了数据库连接。

$stmt-&gt;close(); 放在关闭?&gt; 标记之前。

此外,不要将包括 $result = $stmt-&gt;execute(); 在内的整个 if/else 块替换为 if(!$stmt-&gt;execute()){trigger_error("There was an error....".$con-&gt;error, E_USER_WARNING);},以便查看失败的真正错误。

您还应该将die("Database Connection Failed"); 替换为
die('Connection failed [' . $con-&gt;connect_error . ']');
以防万一您的连接失败时得到真正的错误。

发现问题出在您的外键上。

【讨论】:

    猜你喜欢
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多