将用户ID添加到MySQL用户列表表时出现不稳定问题
我有一个网站,用户可以登录并向列表中添加项目 用户登录,会话存储他们的电子邮件,我使用电子邮件在用户表中标识他们 然后,他们可以输入一个列表项并添加到包含其ID和列表项的列表表中 有时添加ID,有时返回null(但是,始终添加列表项文本)。这似乎不稳定,因为大部分时间都包含ID 有什么想法吗?表类型为MyISAM。顺便说一句,我是编程新手 下面是我的代码示例:将用户ID添加到MySQL用户列表表时出现不稳定问题,mysql,Mysql,我有一个网站,用户可以登录并向列表中添加项目 用户登录,会话存储他们的电子邮件,我使用电子邮件在用户表中标识他们 然后,他们可以输入一个列表项并添加到包含其ID和列表项的列表表中 有时添加ID,有时返回null(但是,始终添加列表项文本)。这似乎不稳定,因为大部分时间都包含ID 有什么想法吗?表类型为MyISAM。顺便说一句,我是编程新手 下面是我的代码示例: <?php session_start(); $item = $_REQUEST['item']; $email = $_SES
<?php
session_start();
$item = $_REQUEST['item'];
$email = $_SESSION['email'];
if ($item)
{
mysql_connect("localhost","root","") or die("We couldn't connect!");
mysql_select_db("table");
$query = mysql_query("SELECT ID FROM users WHERE email='".$_SESSION['email']."'");
$result = mysql_result($query,0);
$user_id = $result;
mysql_query("INSERT INTO items (user_ID,item_name) VALUES('$user_id','$item')");
首先,请阅读我在对您的问题的评论中所说的有关SQL注入攻击的内容
最好将用户id
存储在$\u会话中,这样您就不必每次都根据电子邮件查询它了。。。但是,如果您坚持只在$\u会话中使用电子邮件,那么您实际上只需要一个查询。调整代码:
<?php
session_start();
$item = mysql_real_escape_string($_REQUEST['item']);
if (!empty($item) && isset($_SESSION['email']))
{
mysql_connect("localhost","root","") or die("We couldn't connect!");
mysql_select_db("table");
mysql_query("INSERT INTO items (user_ID, item_name) VALUES ((SELECT ID FROM users WHERE email='{$_SESSION['email']}'), '$item')");
}
也许他们的会话超时了?会话启动将创建一个新的会话,但不包含电子邮件。为什么不在会话中存储用户id?这样,您就不必在每次插入项时都查询它。此外,您的代码很容易受到SQL注入攻击。您真的应该执行$item=mysql\u real\u escape\u字符串($\u REQUEST['item'])因为有人可以将SQL代码注入到请求中,而您很想保护它。更好地了解如何使用及其对与数据库交互的支持。mysql_*函数已弃用。