【发布时间】:2014-09-02 17:17:27
【问题描述】:
您好,我正在尝试向我的数据库中插入一条记录。字段的数量是可变的,取决于用户表单提交。使用以下代码插入核心数据可以完美地工作
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;
}
所以我的问题是我定义了四个变量
$scounter(这包含我的额外字段的字符串整数值,回显测试将其值作为 sisisi
$qcounter(这包含要输入的字段数,回显显示值是?,?,?,?,?,?,
$input1(这包含所需的数据库字段列表 ech 显示测试值为 order_item1,order_item1_price,order_item2,order_item2_price,order_item3,order_item3_price,
$sinput2(这包含要输入其值的变量 echo 将测试值显示为 $order_item1,$order_item1_price,$order_item2,$order_item2_price,$order_item3,$order_item3_price,
我需要将变量内容输入到准备和绑定参数语句中,但努力使语法正确并不断收到“致命错误:在 /hsphere/ 中的非对象上调用成员函数 bind_param() local/home/mailman2/afbincludes/order_form_handler.php 第 141 行"消息
我真的很感谢一些帮助以使语法正确,另一种方法是添加 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;
}
【问题讨论】:
-
如果条件失败,您的调试代码 (
echo $mysqli->error) 将不会运行。此外,在您的 SQL 中添加一些空格。这是允许的。 -
使用导致语法错误的变量发布您尝试过的代码。可能是
$qcounter、$input1和$sinput2都有尾随逗号,,这将导致->prepare()失败。您可能需要在使用前使用rtrim(',', $qcounter)。 -
这是我尝试插入变量的代码