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语句中的参数提供数据,