使用:Brackets Html编辑器,MySQL Workbench
简化,我有一个包含这些表的数据库
和这个表格。在表单中,需要填写一个地址,并选择填写第二个地址。
<?php
$con = new mysqli("localhost","user","password","database");
if ($con->
connect_error) {
die('Error : ('. $con->connect_errno .') '. $con->connect_error .'');
}
$job_sql = "SELECT idtype, typename FROM type;";
$job_data = $con->query($job_sql);
//insert if(isset()) here
$con->close();
?>
<form method="post">
<select name="typeSlc" required>
<option disabled selected>_</option>
<?php while($row = mysqli_fetch_array($job_data)) { ?>
<option value="<?php echo $row['jobid'];?>"><?php echo $row['jobname'];?></option>
<?php } ?>
</select>
<input name="fnTxt" required type="text">
<input name="lnTxt" required type="text">
<input name="adressTxt" required type="text">
<input name="cityTxt" required type="text">
<input name="opt_adressTxt" type="text">
<input name="opt_cityTxt" type="text">
<input name="submit" value="submit" type="submit">
</form
我希望在'opt_adress'设置时向服务器发送一批带有一批查询的事务,而在不设置时则发送另一批事务,即:
if(isset($_POST['submit'])) {
if(isset($_POST['opt_adress'])) {
$sql = sprintf ("BEGIN;
INSERT INTO person (fk_job, fn, ln)
VALUES (%s, '%s', '%s');
SELECT LAST_INSERT_ID() INTO @id;
INSERT INTO adress (fk_person, adress)
VALUES (@id, '%s');
INSERT INTO adress (fk_person, adress, city)
VALUES (@id, '%s', '%s');
COMMIT;",
$con->real_escape_string($_POST['jobSlc']),
$con->real_escape_string($_POST['fnTxt']),
$con->real_escape_string($_POST['lnTxt']),
$con->real_escape_string($_POST['adressTxt']),
$con->real_escape_string($_POST['cityTxt']),
$con->real_escape_string($_POST['opt_adressTxt']),
$con->real_escape_string($_POST['opt_cityTxt']))
;
} else {
$sql = sprintf ("BEGIN;
INSERT INTO person (fk_job, fn, ln)
VALUES (%s, '%s', '%s');
INSERT INTO adress (fk_person, adress, city)
VALUES (LAST_INSERT_ID(), '%s', '%s');
COMMIT;",
$con->real_escape_string($_POST['jobSlc']),
$con->real_escape_string($_POST['fnTxt']),
$con->real_escape_string($_POST['lnTxt']),
$con->real_escape_string($_POST['adressTxt']),
$con->real_escape_string($_POST['cityTxt']))
;
}
$con->query($sql);
header("Location: samepage.php");
当我尝试运行查询时,它不会进入数据库(我正在使用MySQL Workbench)。没有错误消息,但查询不成功。
如果可选输入中存在现有值,我想在事务中插入批处理。这是正确的字符串吗?或者我可以使用更时尚的代码吗?
此问题中的表单和数据库是我在现实中使用的简化版本。
提前致谢,-burrdie
答案 0 :(得分:0)
您必须了解查询与一批查询之间的区别。
由于您必须执行多个单独的查询,因此您还必须进行多次单独的query()调用。
所以改变你的代码
$con->query("BEGIN");
$con->query(sprintf ("INSERT INTO person (fk_job, fn, ln)...");
$con->query("SELECT LAST_INSERT_ID() INTO @id");
// ...so on
你将被设定。
此外,它还可以让您编写更时尚的代码,因为您可以在执行过程中添加条件,从而不会复制代码。