Php SQL错误,我试图在3表中插入数据,因为其他2表是桥
错误: 您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以获取第1行中使用的正确语法(接近“)” 还有更好的办法吗Php SQL错误,我试图在3表中插入数据,因为其他2表是桥,php,sql,mariadb,Php,Sql,Mariadb,错误: 您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以获取第1行中使用的正确语法(接近“)” 还有更好的办法吗 $insertSQL = sprintf("INSERT INTO booking (book_id,book_start_rent,book_end_rent,book_total,staff_id) VALUES (%s, %s, %s, %s, %s)", GetSQLValueString($_POST['
$insertSQL = sprintf("INSERT INTO booking (book_id,book_start_rent,book_end_rent,book_total,staff_id) VALUES (%s, %s, %s, %s, %s)",
GetSQLValueString($_POST['book_id'], "text"),
GetSQLValueString($_POST['book_start_rent'], "date"),
GetSQLValueString($_POST['book_end_rent'], "date"),
GetSQLValueString($_POST['book_total'], "double"),
GetSQLValueString($_POST["state2"], "text")
/"INSERT INTO car_booking (car_id, book_id) VALUES (%s, %s)",
GetSQLValueString($_POST['state'], "text"),
GetSQLValueString($_POST['book_id'], "text")
/"INSERT INTO member_booking (mem_id, book_id) VALUES (%s, %s)",
GetSQLValueString($colname_information2, "text"),
GetSQLValueString($_POST['book_id'], "text")
);
编辑:我试着用分号;在insert结束时,出现错误语法错误,意外“;”代码>
$insertSQL = sprintf("INSERT INTO booking (book_id,book_start_rent,book_end_rent,book_total,staff_id) VALUES (%s, %s, %s, %s, %s)",
GetSQLValueString($_POST['book_id'], "text"),
GetSQLValueString($_POST['book_start_rent'], "text"),
GetSQLValueString($_POST['book_end_rent'], "text"),
GetSQLValueString($_POST['book_total'], "double"),
GetSQLValueString($_POST["state2"], "text");
"INSERT INTO car_booking (car_id, book_id) VALUES (%s, %s)",
GetSQLValueString($_POST['state'], "text"),
GetSQLValueString($_POST['book_id'], "text");
"INSERT INTO member_booking (mem_id, book_id) VALUES (%s, %s)",
GetSQLValueString($colname_information2, "text"),
GetSQLValueString($_POST['book_id'], "text");
);
编辑2:我终于可以插入了,但是有一个新的错误是
无法添加或更新子行:外键约束失败(car)
租赁预订
会员预订
,约束
FK会员外键
(mem_id
)在更新时删除级联上引用成员(mem_id
)
级联)
您可以使用PDO:
// init PDO connection
$db = new PDO('mysql:host=localhost;dbname=testdb;', 'username', 'password');
$sql1 = "INSERT INTO booking (book_id, book_start_rent, book_end_rent, book_total, staff_id) VALUES (:book_id, :book_start, :book_end_rent, :book_total, :staff_id)";
$prepared1 = $db->prepare($sql);
$result1 = $prepared->execute(
array(
':book_id' => GetSQLValueString($_POST['book_id'], "text"),
':book_start' => GetSQLValueString($_POST['book_start_rent'], "date"),
':book_end_rent' => GetSQLValueString($_POST['book_end_rent'], "date"),
':book_total' => GetSQLValueString($_POST['book_total'], "double"),
':staff_id' => GetSQLValueString($_POST["state2"], "text"),
)
);
// and so on for each of your 3 queries
生成的SQL中有一个错误。首先看一下,您可以在一个查询中执行一个insert(如果您不使用多查询环境)。您必须执行3个独立的插入。。。错误只是你没有;(分号)在每个insert1)的末尾,除非使用mysqli的multi_查询,否则不能在同一查询中执行所有3个插入。把它们分开。2) 您可以进行SQL注入。请确保您使用的是PDO或mysqli,并使用准备好的语句和参数绑定。顺便说一句,您的代码中有一个非常有趣的划分,我认为这完全是非自愿的:
GetSQLValueString(…)/“INSERT-INTO…”
。您在哪里尝试注释掉字符串?正如在/“插入…”
?@XitoxReturns中一样,只需将每个插入查询作为一个单独的查询运行。在使用参数绑定时,不需要使用getSQLValueString。如果您假设它所做的一切都是sql注入,但可能是更多的事情,我不知道函数中有什么内容,这几乎就是它所做的一切。
// init PDO connection
$db = new PDO('mysql:host=localhost;dbname=testdb;', 'username', 'password');
$sql1 = "INSERT INTO booking (book_id, book_start_rent, book_end_rent, book_total, staff_id) VALUES (:book_id, :book_start, :book_end_rent, :book_total, :staff_id)";
$prepared1 = $db->prepare($sql);
$result1 = $prepared->execute(
array(
':book_id' => GetSQLValueString($_POST['book_id'], "text"),
':book_start' => GetSQLValueString($_POST['book_start_rent'], "date"),
':book_end_rent' => GetSQLValueString($_POST['book_end_rent'], "date"),
':book_total' => GetSQLValueString($_POST['book_total'], "double"),
':staff_id' => GetSQLValueString($_POST["state2"], "text"),
)
);
// and so on for each of your 3 queries