Php 仅当datatabase中存在用户时才将mysql插入数据库?
您好,我正在寻找一种方法,在php或mysql中实现一个条件,仅当数据库中存在“from_user_id”时,才执行下面的mysql查询 我有一个名为ptb_users的表,它存储了所有用户id,下面的查询插入内容的另一个表是ptb_wallposts 用户可以在其他用户墙上写入,但在用户可以在用户墙上写入之前/在插入查询运行之前,我希望条件与ptb_用户交叉引用,以确保发送消息的用户/from_user_id存在。因此,如果用户1已登录并希望向用户发送消息,则它首先检查from_user_id是否与ptb_users中的user_id匹配 因此,例如,我不希望人们通过能够将from_user_id设置为0来sql将数据注入数据库,它必须与数据库中的user_id匹配,或者显示错误消息 有人能告诉我怎么做吗。谢谢 我的ptb_墙纸桌是这样的Php 仅当datatabase中存在用户时才将mysql插入数据库?,php,mysql,Php,Mysql,您好,我正在寻找一种方法,在php或mysql中实现一个条件,仅当数据库中存在“from_user_id”时,才执行下面的mysql查询 我有一个名为ptb_users的表,它存储了所有用户id,下面的查询插入内容的另一个表是ptb_wallposts 用户可以在其他用户墙上写入,但在用户可以在用户墙上写入之前/在插入查询运行之前,我希望条件与ptb_用户交叉引用,以确保发送消息的用户/from_user_id存在。因此,如果用户1已登录并希望向用户发送消息,则它首先检查from_user_id
id | from_user_id | to_user_id | content
1 2 3 hello
我的ptb_用户表如下所示:
id | user_id |
1 2
mysql查询:
$sql = "INSERT INTO ptb_wallposts (id, from_user_id, to_user_id, content) VALUES (NULL, '".$_SESSION['user_id']."', '".$profile_id."', '".$content."');";
mysql_query($sql, $connection);
使用外键,SQL为您完成这项工作。首先,您需要像这样添加它们
ALTER TABLE `ptb_wallposts`
ADD CONSTRAINT `users_wallposts_fk_1` FOREIGN KEY (`from_user_id`) REFERENCES `ptb_users` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `users_wallposts_fk_2` FOREIGN KEY (`to_user_id`) REFERENCES `ptb_users` (`id`) ON DELETE CASCADE;
现在,如果您想插入一个不在ptb_用户中的id,您将得到一个SQL错误
有关删除级联的含义的信息,请参见。您可以尝试以下操作:
if(mysql_num_rows(mysql_query("SELECT id FROM ptb_users WHERE user_id='".$_SESSION['user_id']."'"))){
//your insert statement
}
else{
//not allowed
}
我看到您正在使用$\u会话变量,我认为您不需要检查数据库中是否存在用户id,因为最终用户无法操作$\u会话变量。您可以首先选择。。。如果没有空值,请执行插入。首先,确保为from_user_id、to_user_id和user's table创建外键,然后显示友好消息,你可以像zipser提到的那样进行选择,我将如何构造我的select语句我已经尝试过:$sql=select user\u id FROM ptb\u users WHERE ptb\u users.user\u id=ptb\u wallposts.FROM_user\u id;如果$sql$sql2=插入到ptb_wallposts id中,从_user_id插入到_user_id,内容值为空,'.$_SESSION['user_id'].','.$profile_id.','.$content.';;mysql\u查询$sql,$connection;这在以前的文章中已经被问过了:和其他以前的文章。1452-无法添加或更新子行:外键约束失败ptb2013/sql-22b9_26f4d4,约束用户\u wallposts\u fk\u 1删除级联上的用户id引用ptb_用户id的外键当前是否有无效条目?我能补充一下吗,比如说ptb_wallposts.from_user_id不为空?所以人们不能破解它并添加用户id 0?