Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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 execute不会返回任何错误,但不会在数据库中添加任何行_Php_Mysql - Fatal编程技术网

PHP execute不会返回任何错误,但不会在数据库中添加任何行

PHP execute不会返回任何错误,但不会在数据库中添加任何行,php,mysql,Php,Mysql,我有下面的PHP脚本,应该在单击register按钮以及选中address复选框时执行 if(isset($_POST['register'])){ if($_POST['addressCheckBox'] == 'Yes'){ if(isset($_POST['streetNumber']) && isset($_POST['route']) && isset($_POST['sublocality_level_1'])){

我有下面的PHP脚本,应该在单击register按钮以及选中address复选框时执行

if(isset($_POST['register'])){
   if($_POST['addressCheckBox']  == 'Yes'){
      if(isset($_POST['streetNumber']) && isset($_POST['route']) && isset($_POST['sublocality_level_1'])){
         $unitDetails = trim($_POST['unitDetails']);
         $streetNumber = mysqli_real_escape_string($db, trim($_POST['streetNumber']));
         $route = mysqli_real_escape_string($db, trim($_POST['route']));
         $suburb = mysqli_real_escape_string($db, trim($_POST['sublocality_level_1']));
         $city = mysqli_real_escape_string($db, trim($_POST['city']));
         $zipCode = mysqli_real_escape_string($db, trim($_POST['zipCode']));
         $province = mysqli_real_escape_string($db, trim($_POST['province']));
         $country = mysqli_real_escape_string($db, trim($_POST['country']));
         $email = mysqli_real_escape_string($db, trim($_POST['email']));

         if(!empty($streetNumber)  && !empty($route) && !empty($city) && !empty($province) && !empty($zipCode) && !empty($country)){
            $queryInsertMemberAddress = $db->prepare("INSERT INTO address (memberEmail, unitDetails, houseNumber, streetName, suburb, city, postalCode, province, country) VALUES (?,?,?,?,?,?,?,?,?)");

            $queryInsertMemberAddress->bind_param('ssisssiss', $email, $unitDetails, $streetNumber, $route, $suburb, $city, $zipCode, $province, $country);

            $queryInsertMemberAddress->execute() or die($queryInsertMemberAddress->error);
         }
      }
   }
}
脚本运行时,我没有收到任何错误,但数据库中没有插入任何行。我尝试通过执行以下操作查找错误:

  • ->execute()之后对$queryInsertMemberAddress执行var\u dump,它将返回

    object(mysqli_stmt)[19]
       public 'affected_rows' => null
       public 'insert_id' => null
       public 'num_rows' => null
       public 'param_count' => null
       public 'field_count' => null
       public 'errno' => null
       public 'error' => null
       public 'error_list' => null
       public 'sqlstate' => null
       public 'id' => null
    
    mysqli_stmt Object ( [affected_rows] => 1 [insert_id] => 28 [num_rows] => 0 [param_count] => 9 [field_count] => 0 [errno] => 0 [error] => [error_list] => Array ( ) [sqlstate] => 00000 [id] => 4 
    
  • ->execute()之后对$queryInsertMemberAddress变量执行print\r,它将返回

    object(mysqli_stmt)[19]
       public 'affected_rows' => null
       public 'insert_id' => null
       public 'num_rows' => null
       public 'param_count' => null
       public 'field_count' => null
       public 'errno' => null
       public 'error' => null
       public 'error_list' => null
       public 'sqlstate' => null
       public 'id' => null
    
    mysqli_stmt Object ( [affected_rows] => 1 [insert_id] => 28 [num_rows] => 0 [param_count] => 9 [field_count] => 0 [errno] => 0 [error] => [error_list] => Array ( ) [sqlstate] => 00000 [id] => 4 
    
  • 我不明白为什么打印显示一行受影响,但数据库中没有显示任何记录。有人知道我哪里做错了吗?

    广泛关注 每次调用数据库类的方法时,都应该将其包装在
    if
    语句中,以检查其执行是否正确,然后反馈发现的任何错误

    • 删除所有
      mysqli\u real\u escape\u string
      调用,它们是多余的

    • 是否允许您的MySQL用户将数据插入该表?您在PHP连接中指定的用户是否具有插入
      的权限


    我在这里可能完全错了,但我认为可能是您的
    bind_param
    语句破坏了您的SQL

    Bind Param要求给定的元素属于第一个字符串中指定的类型,您有
    ssissis
    ,它是所有字符串,其中混入了一些整数。这很好,但是您的数据都来自
    $\u POST
    元素,它们总是字符串

    因此,如果您var_转储插入的数据,那么您将var_转储大量
    (string)
    类型值。并且没有
    (int)
    类型值

    范例

     $_POST['value'] = "1"; //this is a string
     $value = mysqli_real_escape_string($db,trim($_POST['value'])); //optional, from your code...
     var_dump($value); /// (string)"1";
    
    但您不能将Bind Param转换为所有字符串(
    sss
    ),因为这将与您试图插入的MySQL列的数据类型不匹配

    我认为正在发生的事情是,由于这些类型不匹配,缺少值和/或中止整个SQL,并且由于某些原因没有给您适当的错误反馈

    如何检查

    if(!$queryInsertMemberAddress->bind_param('ssisssiss', $email, $unitDetails, ...) ){
        die("bind failed"); //bind_param returns true or false 
    }
    
    解决建议:
    请让我知道这是如何进行的,以及这会给您带来什么结果。

    PHP是否输入条件?@lvaroGonzález是的,它输入条件。我使用echo测试了它,以确保它实际上输入了所有四个条件statements@Hozington数据库连接呢?你不需要所有带有参数化查询“[insert\u id]=>28”的
    mysqli\u real\u escape\u字符串
    s-数据库中是否有具有该id的记录?如果没有-您正在查找正确的数据库吗?