如何使用 PHP 插入或更新外键值
Posted
技术标签:
【中文标题】如何使用 PHP 插入或更新外键值【英文标题】:How to insert or update foreign key values using PHP 【发布时间】:2015-09-11 11:01:28 【问题描述】:我在mysql数据库中做了2个表
-
user_details
bank_details
在 user_details 中创建以下实体
-
user_id 作为主键
用户名
密码
地址
在 bank_details 中创建以下实体
-
id 作为主键
user_id 作为外键
银行名称
ac_no
首先使用以下代码插入用户详细信息
<?php
$un = $_POST['un'];
$ps = $_POST['ps'];
$adr = $_POST['adr'];
$sql = mysql_query("insert into user_details username='$un', password='$ps', address='$adr'");
?>
现在我需要在 bank_details 表中插入银行详细信息
<?php
$bn = $_POST['bn'];
$ac_no = $_POST['ac'];
$sql = mysql_query("insert into bank_details user_id= ?? bank_name='$bn', ac_no='$ac_no'");
?>
如何在这里定义外键值?
【问题讨论】:
你在DB中设置关系了吗? mysql_* 扩展被标记为弃用,见docs.php.net/mysqlinfo.api.choosing 一个接一个地跑@mfisher91 简而言之:user_id= LAST_INSERT_ID()
,见dev.mysql.com/doc/refman/5.6/en/…
脚本也容易出现sql注入(见php.net/security.database.sql-injection)
【参考方案1】:
您的查询省略了 MYSQL SET
关键字。无论如何,您可以按照您的代码约定执行此操作:
<?php
$mysql = mysql_connect([...]
$un = mysql_real_escape_string($_POST['un'], $mysql);
$ps = mysql_real_escape_string($_POST['ps'], $mysql);
$adr = mysql_real_escape_string($_POST['adr'], $mysql);
$sql = mysql_query("insert into user_details SET username='$un', password='$ps', address='$adr'", $mysql);
if(!$sql)
// something went wrong with the query, add error handling here
trigger_error('query failed', E_USER_ERROR);
else
$user_id = mysql_insert_id(); //get the id of the last inserted query/user
$bn = mysql_real_escape_string($_POST['bn'], $mysql);
$ac_no = mysql_real_escape_string($_POST['ac'], $mysql);
$sql = mysql_query("insert into bank_details SET user_id = $user_id, bank_name='$bn', ac_no='$ac_no'", $mysql);
if(!$sql)
// something went wrong with the query, add error handling here
trigger_error('query failed', E_USER_ERROR);
?>
但是,我必须指出,不推荐使用 mysql_*
系列函数,您应该认真开始使用 mysqli_*
函数。
更新:
根据 CodeGodie 的建议,这是使用 mysqli_*
函数重写的代码:
<?php
$mysqli = mysqli_connect(SERVER_NAME, USER_NAME, PASSWORD, DB_NAME);
$un = mysqli_real_escape_string($_POST['un']);
$ps = mysqli_real_escape_string($_POST['ps']);
$adr = mysqli_real_escape_string($_POST['adr']);
$sql = mysqli_query($mysqli, "insert into user_details SET username='$un', password='$ps', address='$adr'");
if(!$sql)
// something went wrong with the query, add error handling here
trigger_error('query failed', E_USER_ERROR);
else
$user_id = mysqli_insert_id($mysqli); //get the id of the last inserted query/user
$bn = mysqli_real_escape_string($_POST['bn']);
$ac_no = mysqli_real_escape_string($_POST['ac']);
$sql = mysqli_query($mysqli, "insert into bank_details SET user_id = $user_id, bank_name='$bn', ac_no='$ac_no'");
if(!$sql)
// something went wrong with the query, add error handling here
trigger_error('query failed', E_USER_ERROR);
?>
【讨论】:
抱歉,我很想在脚本中添加一些错误处理的概念;-) ...并处理可能的 sql 注入 :-) @Volkerk,感谢您的编辑。欣赏。 OP 肯定会需要它。 你应该用mysqli
函数重写你的答案以上是关于如何使用 PHP 插入或更新外键值的主要内容,如果未能解决你的问题,请参考以下文章