提问人:alexander wallaard 提问时间:4/8/2020 最后编辑:RBTalexander wallaard 更新时间:4/18/2020 访问量:61
无法检索要在另一个查询中使用的 SQL 数据 [重复]
unable to retrieve sql data to use in another query [duplicate]
问:
我正在为一个问题而苦苦挣扎,也许有人可以帮助我:)
在第一个查询中,我想将数据发送到第一个为我生成 id 的表,在第二个 quary 中,我想检索第一个 quary 制作的 id,在第 3 个 quary 中,我想使用该 id 在第二个表中插入其他数据,其 id 与第一个表相同。
我的问题是:除了$id之外,所有东西都插入得很好,我是否遗漏了什么?
<?php
session_start();
//declaratie sessie variabelen
$username = $_SESSION['username'];
$voornaam = $_SESSION['voornaam'];
$achternaam = $_SESSION['achternaam'];
$firma = $_SESSION['firma'];
//database configuratie file
require('dbconfig.php');
//Declaratie post variabelen
$ticnaam = $_POST['ticket_naam'];
$ticonderwerp = $_POST['ticket_onderwerp'];
$ticassign = $_POST['ticket_voor'];
$bericht = $_POST['bericht'];
//proccesing
//procces first quary
$sql = "INSERT INTO `tickets`
(`naam`, `onderwerp`, `maker`)
VALUES ('$ticnaam', '$ticonderwerp', '$username')";
//retrieves the generated new id from the quary above
$sql2 = "SELECT id FROM tickets where onderwerp='$ticonderwerp' AND naam = '$ticnaam';";
$result2 = mysqli_query($mysqli,$sql2);
$id = mysqli_fetch_array($result2,MYSQLI_ASSOC);
//insertes the id into another quary
$sql3 = "INSERT INTO `berichten`
(`id`, `text`, `voornaam`,`achternaam`,`firma`)
VALUES ('$id', '$bericht', '$voornaam',
'$achternaam','$firma')";
//sql3 ok? user can continu
if($mysqli->query($sql3) == TRUE) {
require('email_na_ticketaanmaak.php')
?>
<script>alert('nieuw ticket is gemaakt');</script>
<?php
require('../procces_files/email_na_ticketaanmaak.php');
header('Location: ../home/index.php');
}else{
echo "Error: " . $sql . "<br>" . $mysqli->error;
}
$mysqli->close();
?>
答:
0赞
RiggsFolly
4/8/2020
#1
mysqli 对象有一个属性,如果该列是 AutoIncrement 列,则该属性将返回新插入的行。$insert_id
id
id
<?php
session_start();
//database configuratie file
require('dbconfig.php');
// process first query
$sql = "INSERT INTO `tickets`
(`naam`, `onderwerp`, `maker`) VALUES (?,?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('sss', $_POST['ticket_naam'],
$_POST['ticket_onderwerp'],
$_SESSION['username']);
$stmt->execute();
// retrieves the generated new id from the query above
$new_id = $mysqli->insert_id;
// inserts the id into another query
$sql = "INSERT INTO `berichten`
(`id`, `text`, `voornaam`,`achternaam`,`firma`)
VALUES (?,?,?,?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('isss', $new_id,
$_POST['bericht'],
$_SESSION['voornaam'],
$_SESSION['achternaam'],
$_SESSION['firma']);
$res = $stmt->execute();
if ($res) {
require('email_na_ticketaanmaak.php')
require('../procces_files/email_na_ticketaanmaak.php');
header('Location: ../home/index.php');
}else{
echo "Error: " . $sql . "<br>" . $mysqli->error;
}
?>
如果您要重定向到另一个页面
header('Location: ../home/index.php');
将其发送回您所在的页面是没有意义的,因为您永远不会看到它。
<script>alert('nieuw ticket is gemaakt');</script>
此外,您的脚本对 SQL 注入攻击持开放态度。 即使你正在逃避输入,它也不安全!您应该考虑在 或 API 中使用准备好的参数化语句,而不是串联值
MYSQLI_
PDO
因此,我稍微更改了代码,以使用参数化、准备和绑定的查询。
评论
mysqli::$insert_id
$sql