如何修改PHP代码实现向SSMS备注表插入关联用户ID的记录?
问题与解决方案
问题背景
我在SSMS中有两张表:
- 用户凭证表(
testing):
| id | name |
|---|---|
| 1007 | max |
| 1008 | james |
- 备注表(
remarks):
| id | remarks |
|---|---|
| 1007 | user input 1 |
| 1007 | user input 2 |
| 1008 | user input 1 |
当前我的PHP代码通过两次INSERT操作分别插入用户id和备注内容,导致备注表中生成两条独立记录,不符合需求。需要修改代码实现将用户id与对应备注插入到同一条记录中。
原代码:
$stmt = sqlsrv_prepare($conn, "INSERT INTO remarks (id) SELECT id FROM testing WHERE id = ?", array($loginID)); if (sqlsrv_execute($stmt)) { echo "Record inserted successfully."; } else { echo "Error inserting record: " . sqlsrv_errors(); } $stmt1 = sqlsrv_prepare($conn, "INSERT INTO remarks (remarks) VALUES (?)", array($remarks1)); if (sqlsrv_execute($stmt1)) { echo "Record inserted successfully."; } else { echo "Error inserting record: " . sqlsrv_errors(); }
解决方案
只需把两次INSERT合并成一次,同时插入id和remarks两个字段即可,提供两种实现方式:
方式一:直接使用VALUES子句
直接将用户ID和备注作为参数传入,一次性插入同一条记录:
// 准备同时插入id和remarks的SQL语句 $stmt = sqlsrv_prepare($conn, "INSERT INTO remarks (id, remarks) VALUES (?, ?)", array($loginID, $remarks1)); if (sqlsrv_execute($stmt)) { echo "Record inserted successfully."; } else { // 格式化错误信息,避免输出数组结构 $errors = sqlsrv_errors(); echo "Error inserting record: " . $errors[0]['message']; }
方式二:结合SELECT验证用户ID后插入
如果需要确保插入的用户ID确实存在于testing表中,用这种方式可以避免无效数据插入:
$stmt = sqlsrv_prepare($conn, "INSERT INTO remarks (id, remarks) SELECT id, ? FROM testing WHERE id = ?", array($remarks1, $loginID)); if (sqlsrv_execute($stmt)) { echo "Record inserted successfully."; } else { $errors = sqlsrv_errors(); echo "Error inserting record: " . $errors[0]['message']; }
注意事项
- 两种方式都能避免生成两条独立的空字段记录,实现需求。
- 方式二更严谨,会先校验用户ID的合法性,推荐使用。
sqlsrv_errors()返回的是数组,直接输出会显示Array,需要提取具体错误信息。
内容的提问来源于stack exchange,提问作者Shifaul Rosman
相关产品推荐
相关产品推荐

