我正在尝试使用已经从先前的SELECT查询返回的关联插入PHP的SQL表中。但是编译器给我一个语法错误“意外的$ EOF”。
本质上,这就是我在做什么:
$query2 = "SELECT * FROM users WHERE user_name='$user.username'";
$result2 = mysqli_query($db, $query2);
$new_user = mysqli_fetch_assoc($result2);
$query3 = "INSERT INTO new_table (new_user_id) VALUES('$new_user['user_id']');";
mysqli_query($db, $query3);
查询3是给我错误的查询。我以前在fetch关联中引用过这样的变量。我是PHP的新手,但不是仅通过创建字典就可以通过关联获取信息吗?有什么想法吗?
谢谢
答案 0 :(得分:1)
问题似乎出在下面的代码中,用单引号引起来:
VALUES('$new_user['user_id']')
如果您要像这样在查询之外设置变量,它应该可以工作:
$user_id = $new_user['user_id'];
$query3 = "INSERT INTO new_table (new_user_id) VALUES('$user_id');";
我还建议您将查询参数化。
答案 1 :(得分:1)
EOF
错误是end of file
的缩写,这意味着PHP认为您的脚本不会以您认为的结尾结束。这通常是由于未关闭控制块引起的,例如{...code ?>
,没有结束}
。
您还有其他应解决的问题。您不应在查询中使用变量。您不能在字符串中使用带引号的索引。您无需执行2个查询即可执行您要尝试执行的操作。
INSERT INTO new_table (new_user_id) SELECT user_id FROM users WHERE user_name= ?
应该工作。将其与prepare
,bind_param
和execute
结合使用,您的代码将更加安全。
您还可以在http://php.net/manual/en/mysqli.quickstart.prepared-statements.php上了解有关这些概念的更多信息。
如果对SQL查询的工作方式感兴趣,请参见此https://dev.mysql.com/doc/refman/8.0/en/insert-select.html。