PHP/SQL 使用准备好的语句从表单插入数据并从另一个 table 插入数据
PHP/SQL Insert data from form and insert data from another table using prepared statement
我正在尝试在我正在创建的网站上创建销售(想想 ebay),用户输入所有输入详细信息以创建可销售商品,单击按钮,所有信息都会插入到db table 'sellingitems' 使用准备好的语句,现在我遇到的问题是我试图从 table (用户)中获取用户位置(州和郊区)的详细信息并插入使用 SaleState、SaleSuburb 在销售项目 table 中全部进入 "sellingitems" 的准备好的语句,我得到的错误是
" 致命错误:语句失败!您的 SQL 语法有误;请查看与您的 MySQL 服务器版本对应的手册,了解在 [=21= 附近使用的正确语法] 在“
中的第 2 行
我希望这是清楚易懂的,我已经研究了很多小时,但在 INSERT 上找不到任何可以通过连接或其他方式帮助我的东西,请问我是否需要澄清任何事情,提前谢谢你帮忙!!
$stmt = mysqli_prepare($conn, "INSERT INTO sellingitems (ItemID, UserID, CatID, ItemName, ItemDesc, ItemAmount, TimeFrame, ItemCond, Postage, Returns, SaleState, SaleSuburb)
SELECT State, Suburb FROM user WHERE UserID = '$UID'
VALUES ('',?,'',?,?,?, CURRENT_TIMESTAMP,?,?,?,State,Suburb)");
if ($stmt === false) {
trigger_error('Statement failed! ' . htmlspecialchars(mysqli_error($conn)), E_USER_ERROR);
}
$bind = mysqli_stmt_bind_param($stmt, 'issdsssss', $UID, $ItemName, $ItemDesc, $Amount, $ItemCond, $Postage, $Returns);
if ($bind === false) {
trigger_error('Bind param failed!', E_USER_ERROR);
}
$exec = mysqli_stmt_execute($stmt);
if ($exec === false) {
trigger_error('Statement execute failed! ' . htmlspecialchars(mysqli_stmt_error($stmt)), E_USER_ERROR);
}
if ($stmt == false) {
$response = "Sorry something went wrong. : ";
print_r($response);
print_r($stmt->mysqli_error);
print_r($stmt->error);
return;
} else {
$response = "Sale Created.";
print_r($response);
}
这不是 INSERT SELECT 的正确语法。 See the documentation.
试试这个:
$stmt = mysqli_prepare($conn, "INSERT INTO sellingitems (ItemID, UserID, CatID, ItemName, ItemDesc, ItemAmount, TimeFrame, ItemCond, Postage, Returns, SaleState, SaleSuburb)
SELECT '',?,'',?,?,?, NOW(),?,?,?,State,Suburb FROM user WHERE UserID = '$UID'");
更好的方法是将两个语句分开,如下所示:
$result = mysqli_query($conn, "SELECT State, Suburb FROM user WHERE UserID = '$UID'");
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$stmt = mysqli_prepare(
$conn,
"INSERT INTO sellingitems (
ItemID,
UserID,
CatID,
ItemName,
ItemDesc,
ItemAmount,
TimeFrame,
ItemCond,
Postage,
Returns,
SaleState,
SaleSuburb)
VALUES
('', ?, '', ?, ?, ?, NOW(), ?, ?, ?, '{$row['State']}', '{$row['Suburb']}')"
);
我正在尝试在我正在创建的网站上创建销售(想想 ebay),用户输入所有输入详细信息以创建可销售商品,单击按钮,所有信息都会插入到db table 'sellingitems' 使用准备好的语句,现在我遇到的问题是我试图从 table (用户)中获取用户位置(州和郊区)的详细信息并插入使用 SaleState、SaleSuburb 在销售项目 table 中全部进入 "sellingitems" 的准备好的语句,我得到的错误是
" 致命错误:语句失败!您的 SQL 语法有误;请查看与您的 MySQL 服务器版本对应的手册,了解在 [=21= 附近使用的正确语法] 在“
中的第 2 行我希望这是清楚易懂的,我已经研究了很多小时,但在 INSERT 上找不到任何可以通过连接或其他方式帮助我的东西,请问我是否需要澄清任何事情,提前谢谢你帮忙!!
$stmt = mysqli_prepare($conn, "INSERT INTO sellingitems (ItemID, UserID, CatID, ItemName, ItemDesc, ItemAmount, TimeFrame, ItemCond, Postage, Returns, SaleState, SaleSuburb)
SELECT State, Suburb FROM user WHERE UserID = '$UID'
VALUES ('',?,'',?,?,?, CURRENT_TIMESTAMP,?,?,?,State,Suburb)");
if ($stmt === false) {
trigger_error('Statement failed! ' . htmlspecialchars(mysqli_error($conn)), E_USER_ERROR);
}
$bind = mysqli_stmt_bind_param($stmt, 'issdsssss', $UID, $ItemName, $ItemDesc, $Amount, $ItemCond, $Postage, $Returns);
if ($bind === false) {
trigger_error('Bind param failed!', E_USER_ERROR);
}
$exec = mysqli_stmt_execute($stmt);
if ($exec === false) {
trigger_error('Statement execute failed! ' . htmlspecialchars(mysqli_stmt_error($stmt)), E_USER_ERROR);
}
if ($stmt == false) {
$response = "Sorry something went wrong. : ";
print_r($response);
print_r($stmt->mysqli_error);
print_r($stmt->error);
return;
} else {
$response = "Sale Created.";
print_r($response);
}
这不是 INSERT SELECT 的正确语法。 See the documentation.
试试这个:
$stmt = mysqli_prepare($conn, "INSERT INTO sellingitems (ItemID, UserID, CatID, ItemName, ItemDesc, ItemAmount, TimeFrame, ItemCond, Postage, Returns, SaleState, SaleSuburb)
SELECT '',?,'',?,?,?, NOW(),?,?,?,State,Suburb FROM user WHERE UserID = '$UID'");
更好的方法是将两个语句分开,如下所示:
$result = mysqli_query($conn, "SELECT State, Suburb FROM user WHERE UserID = '$UID'");
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$stmt = mysqli_prepare(
$conn,
"INSERT INTO sellingitems (
ItemID,
UserID,
CatID,
ItemName,
ItemDesc,
ItemAmount,
TimeFrame,
ItemCond,
Postage,
Returns,
SaleState,
SaleSuburb)
VALUES
('', ?, '', ?, ?, ?, NOW(), ?, ?, ?, '{$row['State']}', '{$row['Suburb']}')"
);