Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将用户ID添加到MySQL用户列表表时出现不稳定问题_Mysql - Fatal编程技术网

将用户ID添加到MySQL用户列表表时出现不稳定问题

将用户ID添加到MySQL用户列表表时出现不稳定问题,mysql,Mysql,我有一个网站,用户可以登录并向列表中添加项目 用户登录,会话存储他们的电子邮件,我使用电子邮件在用户表中标识他们 然后,他们可以输入一个列表项并添加到包含其ID和列表项的列表表中 有时添加ID,有时返回null(但是,始终添加列表项文本)。这似乎不稳定,因为大部分时间都包含ID 有什么想法吗?表类型为MyISAM。顺便说一句,我是编程新手 下面是我的代码示例: <?php session_start(); $item = $_REQUEST['item']; $email = $_SES

我有一个网站,用户可以登录并向列表中添加项目

用户登录,会话存储他们的电子邮件,我使用电子邮件在用户表中标识他们

然后,他们可以输入一个列表项并添加到包含其ID和列表项的列表表中

有时添加ID,有时返回null(但是,始终添加列表项文本)。这似乎不稳定,因为大部分时间都包含ID

有什么想法吗?表类型为MyISAM。顺便说一句,我是编程新手

下面是我的代码示例:

<?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'])