使用来自另一个查询的关联的PHP查询

时间:2018-07-01 02:27:21

标签: php mysql mysqli

我正在尝试使用已经从先前的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的新手,但不是仅通过创建字典就可以通过关联获取信息吗?有什么想法吗?

谢谢

2 个答案:

答案 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= ?

应该工作。将其与preparebind_paramexecute结合使用,您的代码将更加安全。

  1. http://php.net/manual/en/mysqli.prepare.php
  2. http://php.net/manual/en/mysqli-stmt.bind-param.php
  3. 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