PHP execute不会返回任何错误,但不会在数据库中添加任何行
我有下面的PHP脚本,应该在单击register按钮以及选中address复选框时执行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'])){
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);
}
}
}
}
脚本运行时,我没有收到任何错误,但数据库中没有插入任何行。我尝试通过执行以下操作查找错误:
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
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的记录?如果没有-您正在查找正确的数据库吗?