(PHP)这里的错误是什么?

时间:2017-05-26 14:34:34

标签: php html

表单上的数据无法保存在数据库中。我在这里找不到什么错。我已经检查了输入表单的名称,这是正确的。我正在使用PDO

if ($_POST) {
$accountuname = ($_POST['accountuname']);
$accountpassword = ($_POST['accountpassword']);
$accounttype = ($_POST['accounttype']);
$companyname = ($_POST['companyname']);
$companyproduct = ($_POST['companyproduct']);
$companyaddress = ($_POST['companyaddress']);
$companycontactnum = ($_POST['companycontactnum']);

$query = "INSERT INTO user_accounts SET USER_NAME=?, USER_PASS=?, USER_ACC_TYPE=?, COMPANY_NAME=?, COMPANY_PRODUCT=?, COMPANY_ADDRESS=?, COMPANY_CONTACTNUM=?";
$stmt  = $conn->prepare($query);
$stmt  -> bindParam(1,$accountuname);
$stmt  -> bindParam(2,$accountpassword);
$stmt  -> bindParam(3,$accounttype);
$stmt  -> bindParam(4,$companyname);
$stmt  -> bindParam(5,$companyproduct);
$stmt  -> bindParam(6,$companyaddress);
$stmt  -> bindParam(7,$companycontactnum);
$stmt  -> execute();
}else{
header("location:index.php");
}

3 个答案:

答案 0 :(得分:1)

从以下位置更改SQL查询:

INSERT INTO user_accounts SET USER_NAME=?, USER_PASS=?, USER_ACC_TYPE=?, COMPANY_NAME=?, COMPANY_PRODUCT=?, COMPANY_ADDRESS=?, COMPANY_CONTACTNUM=?

要:

INSERT INTO user_accounts (USER_NAME, USER_PASS, USER_ACC_TYPE, COMPANY_NAME, COMPANY_PRODUCT, COMPANY_ADDRESS, COMPANY_CONTACTNUM) VALUES (?, ?, ?, ?, ?, ?, ?)

INSERT INTO syntax.

答案 1 :(得分:0)

如果您正在使用mysqli,根据documentation bind_param (而不是bindParam ...也许您正在使用框架?)函数需要第一个参数是string,而不是int:

bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
  

类型

A string that contains one or more characters which specify the types 
     

用于相应的绑定变量:

     

我对应的变量有整数

     

d对应变量的类型为double

     

对应的变量具有类型字符串

     

b对应的变量是一个blob,将以数据包的形式发送

您应该将1,2,3,4 ...改为' d,s,b' (变量类型),它应该工作。

希望它有所帮助!

答案 2 :(得分:0)

您必须指定绑定参数类型,并且您的查询也不正确。

以下是MySQLi中的正确版本:

var mapperConfig = Helper.InitializeAutoMapper();
var mapper = mapperConfig.CreateMapper();
container.RegisterType<IMapper, Mapper>(new InjectionConstructor(mapperConfig));
container.RegisterInstance(mapper, Activator.CreateInstance<T>());

以下是PDO中的正确版本:

$query = "INSERT INTO user_accounts (USER_NAME, USER_PASS, USER_ACC_TYPE, COMPANY_NAME, COMPANY_PRODUCT, COMPANY_ADDRESS, COMPANY_CONTACTNUM) VALUES (?, ?, ?, ?, ?, ?, ?)";
$stmt  = $conn->prepare($query);

$stmt->bindParam("sssssss", $accountuname, $accountpassword, $accounttype, $companyname, $companyproduct, $companyaddress, $companycontactnum);

// Set parameters and execute
$accountuname = $_POST['accountuname'];
$accountpassword = $_POST['accountpassword'];
$accounttype = $_POST['accounttype'];
$companyname = $_POST['companyname'];
$companyproduct = $_POST['companyproduct'];
$companyaddress = $_POST['companyaddress'];
$companycontactnum = $_POST['companycontactnum'];
$stmt->execute();

对于MYSQLi:在此示例中,我假设所有发布的数据都是字符串,否则您必须更改bindParam函数中的'sssssss'。

阅读有关预备陈述的更多信息here
阅读有关MySQLi INSERT语法here

的更多信息