Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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 mysqli使用变量准备和插入语句以插入值和变量语法错误_Php_Mysql_Mysqli - Fatal编程技术网

Php mysqli使用变量准备和插入语句以插入值和变量语法错误

Php mysqli使用变量准备和插入语句以插入值和变量语法错误,php,mysql,mysqli,Php,Mysql,Mysqli,您好,我正在尝试将记录插入我的数据库。字段的数量是可变的,取决于用户表单提交。使用以下代码插入核心数据可以完美地工作 if (!($stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)"))) { if ($insert_stmt = $mysqli->prepare("INSERT INTO submitted_orders (order_date,customer_id,customer_email,cus

您好,我正在尝试将记录插入我的数据库。字段的数量是可变的,取决于用户表单提交。使用以下代码插入核心数据可以完美地工作

 if (!($stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)"))) {


    if ($insert_stmt = $mysqli->prepare("INSERT INTO submitted_orders (order_date,customer_id,customer_email,customer_name,customer_company,customer_message,country_name,city_name,site) VALUES (?, ?, ?, ?, ?, ?, ?,?, ?)")) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;

   //   
};
       if ( $insert_stmt->bind_param('sisssssss', $today,$_SESSION['customer_id'],$_SESSION['email'],$_SESSION['name'],$_SESSION['company_name'],$_SESSION['message'],$_SESSION['country_name'],$_SESSION['city_name'],$_SESSION['site'])) {    echo "Binding parameters failed: (" . $insert_stmt->errno . ") " . $insert_stmt->error;};
        // Execute the prepared query.
         if (!$insert_stmt->execute()) {
echo "Execute failed: (" . $insert_stmt->errno . ") " . $insert_stmt->error;
 }
我的问题是,我有四个定义的变量

$sconter(这包含我的额外字段的字符串整数值。echo测试将其值设为sisi

$qcounter(包含要输入的字段数,回音显示值为?、?、?、?、?、?、?、

$input1(包含数据库字段list required ech显示测试值为order_item1、order_item1_price、order_item2、order_item2_price、order_item3、order_item3_price、

$sinput2(包含要输入其值的变量),echo将测试值显示为$order\u item1、$order\u item1\u price、$order\u item2、$order\u item2\u price、$order\u item3、$order\u item3\u price

我需要将变量内容输入到prepare和bind parameter语句中,但是要想获得正确的语法,并不断得到“致命错误:在/hsphere/local/home/mailman2/afbincludes/order_form_handler.php的第141行对非对象调用成员函数bind_param()”消息

我真的很希望能得到一些语法正确的帮助。另一种方法是添加60个字段,其中大多数字段都有空数据

这是我尝试插入变量的代码

if (!($stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)"))) {
//

// post data // Insert the new user into the database 
if ($insert_stmt = $mysqli->prepare("INSERT INTO submitted_orders ('".$input1.  "',order_date,customer_id,customer_email,customer_name,customer_company,customer_message,country_name,city_name,site) VALUES ('".$qcounter."'?, ?, ?, ?, ?, ?, ?,?, ?)")) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
//

//  
}; 
if ( $insert_stmt->bind_param($scounter.'sisssssss',$input2, $today,$_SESSION['customer_id'],$_SESSION['email'],$_SESSION['name'],$_SESSION['company_name'],$_SESSION['message'],$_SESSION['country_name'],$_SESSION['city_name'],$_SESSION['site'])) {    echo "Binding parameters failed: (" . $insert_stmt->errno . ") " . $insert_stmt->error;};
        // Execute the prepared query.
         if (!$insert_stmt->execute()) {
echo "Execute failed: (" . $insert_stmt->errno . ") " . $insert_stmt->error;
 }

如果你回显你的查询,你会看到语法错误

if ($insert_stmt = $mysqli->prepare("INSERT INTO submitted_orders ('".$input1.  "',order_date,customer_id,customer_email,customer_name,customer_company,customer_message,country_name,city_name,site) VALUES ('".$qcounter."'?, ?, ?, ?, ?, ?, ?,?, ?)"))
应该是

if ($insert_stmt = $mysqli->prepare("INSERT INTO submitted_orders (".$input1.  " order_date,customer_id,customer_email,customer_name,customer_company,customer_message,country_name,city_name,site) VALUES (".$qcounter." ?, ?, ?, ?, ?, ?, ?,?, ?)"))
if ( $insert_stmt->bind_param($scounter.'sisssssss',rtrim($input2, ','),  $today,$_SESSION['customer_id'],$_SESSION['email'],$_SESSION['name'],$_SESSION['company_name'],$_SESSION['message'],$_SESSION['country_name'],$_SESSION['city_name'],$_SESSION['site']))
如果删除单引号
和逗号
$input1
$qcounter
周围/之后。因为列名和占位符不应在引号中,并且它们的值中都有一个尾随逗号

而且

if ( $insert_stmt->bind_param($scounter.'sisssssss',$input2, $today,$_SESSION['customer_id'],$_SESSION['email'],$_SESSION['name'],$_SESSION['company_name'],$_SESSION['message'],$_SESSION['country_name'],$_SESSION['city_name'],$_SESSION['site']))
应该是

if ($insert_stmt = $mysqli->prepare("INSERT INTO submitted_orders (".$input1.  " order_date,customer_id,customer_email,customer_name,customer_company,customer_message,country_name,city_name,site) VALUES (".$qcounter." ?, ?, ?, ?, ?, ?, ?,?, ?)"))
if ( $insert_stmt->bind_param($scounter.'sisssssss',rtrim($input2, ','),  $today,$_SESSION['customer_id'],$_SESSION['email'],$_SESSION['name'],$_SESSION['company_name'],$_SESSION['message'],$_SESSION['country_name'],$_SESSION['city_name'],$_SESSION['site']))

删除调试代码(
echo$mysqli->error
)中的尾随逗号
如果条件失败,则不会运行。此外,在SQL中添加一些空格。这是允许的。使用导致语法错误的变量发布您尝试的代码。可能是
$qcounter
$input1
$sinput2
都有尾随逗号
,这将导致
->prepare()
失败。您可能需要使用
rtrim(',',$qcounter)
在使用之前。这是我尝试插入变量的代码Hanks Sean我已经修改了,但是得到了解析错误:语法错误,第146行/hsphere/local/home/mailman2/afbincludes/order\u form\u handler.php中的意外T_变量可能是因为var input2和today之间缺少逗号?是的,意识到这可能是一个问题。我有upda将其添加到
rtrim($input2,,'),
。尽管您可能需要在之前执行此操作,即
$input2=rtrim($input2,,'));
然后在查询的修剪中使用更新的
$input2
来纠正看不到另一个错误,但需要查看变量,因为未选择任何已添加的字段所有4个变量都将变为null并获取错误,但仍有相同的消息-将添加回显以尝试查找以前未看到的新错误,如下所示需要解释-准备失败:(0)警告:mysqli_stmt::bind_param():类型定义字符串中的元素数与第147行/hsphere/local/home/mailman2/afbincludes/order_form_handler.php中的绑定变量数不匹配执行失败:(2031)没有为第85行的prepared语句中的参数提供数据,