我有两个查询,我想将它们合并为一个,以便它只返回数据库中的一行。
我已尝试UNION
,但我不断收到错误。谁能告诉我它的代码吗?
以下是我的疑问:
if(isset($_POST["response"]))
{
$query = "INSERT INTO response(response) VALUES (:response)";
$statement = $conn->prepare($query);
$statement->execute(
array(
':response' => $_POST["response"]
)
);
$query = " INSERT INTO response (student_id)
SELECT studentid
FROM student
WHERE studentid = '".$_SESSION['studentid']."'";
$statement = $conn->prepare($query);
$statement->execute(
);
最佳答案
UNION 用于将多个 SELECT 查询组合成一个结果集。检查 mySQL(或任何通用 ANSI SQL)文档。
无论如何,当您看起来正在插入同一个表中并且可能希望将所有内容插入同一个表中的同一行时,您会无缘无故地进行两个 INSERT 查询。现在您将创建 2 行而不是 1 行。您可以插入多个字段作为单个查询的一部分。
我在想:
if(isset($_POST["response"]))
{
$query = "INSERT INTO response (student_id, response) SELECT studentid, :response FROM student WHERE studentid = :studentID";
$statement = $conn->prepare($query);
$statement->execute(
array(
':response' => $_POST["response"],
':studentID' => $_SESSION['studentid']
)
);
}
但是,由于您只需要表中的studentID,并且您已经从 session 中获得了studentID,因此从students 表中进行选择似乎毫无意义。唯一的异常(exception)可能是,如果您需要验证 session 中的值是否正确 - 但在将其添加到 session 之前您肯定已经验证过它吗?如果您还没有,您当然应该这样做。
其实很简单
if(isset($_POST["response"]))
{
$query = "INSERT INTO response (student_id, response) VALUES (:studentID, :response)";
$statement = $conn->prepare($query);
$statement->execute(
array(
':response' => $_POST["response"],
':studentID' => $_SESSION['studentid']
)
);
}
应该足够了。
关于php - 将两个查询合并为一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48682803/