Php 在同一查询中使用insert和select
我想插入两个值,第一个是变量,第二个是select语句,但上面的代码不起作用…当使用Php 在同一查询中使用insert和select,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我想插入两个值,第一个是变量,第二个是select语句,但上面的代码不起作用…当使用插入select时,您不需要使用值。删除该变量,然后将$new\u id变量移动到select语句中: $new_id = mysqli_insert_id($dbc) foreach ($_POST['d_specialty'] as $key => $value) { $q = "INSERT INTO d_specialty (d_id, s_id) VALUES ($new_id
插入select时,您不需要使用值。删除该变量,然后将$new\u id
变量移动到select
语句中:
$new_id = mysqli_insert_id($dbc)
foreach ($_POST['d_specialty'] as $key => $value) {
$q = "INSERT INTO d_specialty (d_id, s_id) VALUES ($new_id, (SELECT specialty.id FROM specialty WHERE specialty.name = $value))";
$r = mysqli_query($dbc,$q);
首先,使用insert。选择
:
INSERT INTO d_specialty (d_id, s_id)
SELECT $new_id, specialty.id
FROM specialty
WHERE specialty.name = $value
其次,参数化查询,以便将$new\u id
和$value
作为参数传入,而不是直接放入查询字符串中。一个原因是为了防止SQL注入攻击。另一个非常重要的原因是要防止潜在的语法错误。您的意思是创建查询函数并将变量作为参数调用它?这些变量不是已经参数化了吗@sgeddes@OmarAlhadidy--参数化查询并不意味着使用函数
并传递它们。。。话虽如此,我并不经常使用php
,所以我不确定。改为使用?
看起来不错:谢谢,我会再搜索一点并在@sgedest之后更正它们。原因可能是子查询返回的行数超过1行。警告:使用mysqli
时,您应该使用并将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将$\u POST
或$\u GET
数据直接放入查询,如果有人试图利用您的错误,这可能非常有害。
INSERT INTO d_specialty (d_id, s_id)
SELECT $new_id, specialty.id
FROM specialty
WHERE specialty.name = $value;