php查询

7kqas0il  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(208)

我正试图使用从上一个select查询返回的关联,将其插入到php中的sql表中。但是编译器给了我一个语法错误'unexpected$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非常陌生,但是通过关联获取不就是创建一个字典吗?有什么想法吗?
谢谢,

91zkwejq

91zkwejq1#

问题似乎是代码中的单引号:

VALUES('$new_user['user_id']')

如果要在查询外部设置这样的变量,它应该可以工作:

$user_id = $new_user['user_id'];
$query3 = "INSERT INTO new_table (new_user_id) VALUES('$user_id');";

我还建议您将查询参数化。

lqfhib0f

lqfhib0f2#

这个 EOF error是 end of file 这意味着php认为你的脚本不会在你认为的地方结束。这通常是由控制块未关闭引起的,例如。 {...code ?> 没有关闭 } .
你还有其他一些问题需要解决。不应该在查询中使用变量。不能在字符串中使用带引号的索引。您不需要执行两个查询就可以完成您要做的事情。

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.prepare.php
http://php.net/manual/en/mysqli-stmt.bind-param.php
http://php.net/manual/en/mysqli-stmt.execute.php
你也可以在这里阅读更多关于这些概念的内容,http://php.net/manual/en/mysqli.quickstart.prepared-statements.php.
如果您对sql查询的工作方式感兴趣,请参阅以下内容https://dev.mysql.com/doc/refman/8.0/en/insert-select.html.

相关问题