能否在PHP的for循环中使用772857实现关联表插入?
如何在PHP的for循环中使用772857实现关联表插入
没问题,这完全可以实现!而且思路非常清晰——先往playground表插入数据并拿到它的主键,之后在循环插入guardian表时,把这个主键作为外键关联进去就行。既然你暂时不用PDO,那咱们用mysqli的过程式写法来实现,我给你调整并完善代码:
// 先建立数据库连接(替换成你的数据库信息) $conn = mysqli_connect("localhost", "你的用户名", "你的密码", "你的数据库名"); // 第一步:插入playground表的数据 $playgroundQuery = "INSERT INTO playground (parent, children, amount) VALUES ('John','susy','2000');"; mysqli_query($conn, $playgroundQuery); // 获取刚插入的playground记录的主键ID $playgroundId = mysqli_insert_id($conn); // 准备要插入guardian表的level数组 $levelarray = array ("One", "Two", "Three"); // 循环插入guardian表 for ($i = 0; $i < count($levelarray); $i++) { $level = $levelarray[$i]; // 转义变量防止SQL注入(哪怕先实现功能,这个安全细节也建议加上) $safeLevel = mysqli_real_escape_string($conn, $level); // 插入时用拿到的playgroundId作为外键 $guardianQuery = "INSERT INTO guardian (playgroundid, level) VALUES ('$playgroundId', '$safeLevel');"; mysqli_query($conn, $guardianQuery); } // 最后关闭连接 mysqli_close($conn);
几个关键要点:
- 必须保证全程用同一个数据库连接:
772857是基于当前数据库会话的,换连接就拿不到正确的主键值了,上面的代码全程用的是$conn这个连接,所以没问题。 - 用
mysqli_insert_id()更直观:这个PHP函数直接返回当前连接中最后插入的自增主键,比在SQL语句里写772857更不容易出错,尤其在循环场景下。 - 别忘了防SQL注入:哪怕你现在只追求功能实现,也建议用
mysqli_real_escape_string()转义用户输入的变量,避免后续出现安全问题。
如果你非要在SQL里直接用772857,其实也可以(比如把$playgroundId换成772857),但前提是循环里的INSERT语句必须和第一个playground的INSERT在同一个连接里执行,不过用PHP函数的方式会更稳妥。
内容的提问来源于stack exchange,提问作者Dexter
相关产品推荐
相关产品推荐

