插入奇怪的Mysql问题

时间:2009-03-29 15:05:22

标签: php mysql insert

Hy all,

不确定这里发生了什么,但如果我这样做:

$query = 'INSERT INTO users 
(`id`, `first_name`, `second_name`, `register_date`, `lastlogin_date`) 
VALUES 
("'. $user_id . '", "' . $first_name .'", "'. $second_name . '", "' . $date . '", "' . $date . ");'; 
$result = mysql_query($query);

我得不到回报,但是如果我改成它就没问题了:

$query = 'INSERT INTO users (`id`, `first_name`, `second_name`, `register_date`, `lastlogin_date`) 
VALUES ("21021212", "Joe", "Bloggs", "20090202", "20090202");'; 
$result = mysql_query($query);

用户ID = bigint(20)

first name = varchar(30)

第二名= varchar(30)

date = int(8)

起初我认为这是vars的一个问题,但它们完全相同但仍然无效。

任何帮助表示感谢。

5 个答案:

答案 0 :(得分:6)

养成使用mysql_real_escape_string转义所有数据库输入的习惯 - 实际上,您应该使用某种类型的包装器,如PDOADODb来帮助您执行此操作,但这就是您的方法可能没有:

$query = sprintf("INSERT INTO users ".
    "(id, first_name, second_name, register_date, lastlogin_date)".
    "VALUES('%s','%s','%s','%s','%s')",
    mysql_real_escape_string($user_id),
    mysql_real_escape_string($first_name),
    mysql_real_escape_string($second_name),
    mysql_real_escape_string($date),
    mysql_real_escape_string($date));

 $result = mysql_query($query);

并检查mysql_error

的错误
 if (!$result)
 {
     echo "Error in $query: ".mysql_error();
 }

答案 1 :(得分:4)

“mysql_error()”的结果是什么?一定要检查一下,特别是如果某些东西看起来不起作用的话。

另外,回显$ query以查看其真实情况。这可能很有说服力。

答案 2 :(得分:1)

也许$date的价值是"1111'); DELETE FROM users;"

说真的吗?问题是你不是如何与数据库交互。您不应该使用查询传递数据。您需要指定查询,查询的参数,并在执行查询时传入实际参数值。其他任何东西效率低下,不安全,容易出现像你那样的错误。

通过使用PDO或支持参数化查询的东西,您会发现这些问题会消失,因为您正在调用数据库属性。它也更安全,可以加速数据库。

$sth = $dbh->prepare("INSERT INTO users (`id`, `first_name`, `second_name`, `register_date`, `lastlogin_date`) VALUES (?,?,?,?,?)")
$sth->execute(array($user_id ,$first_name , $second_name , $date, $date ));

答案 3 :(得分:0)

除了回复查询并检查mysql_error()为@GoatRider建议:

  1. 您是否正确地转发了数据?请参阅mysql_real_escape_string()
  2. 使用mysql_query()
  3. 时,不应以分号结束查询

答案 4 :(得分:0)

in $ query ='INSERT INTO用户(idfirst_namesecond_nameregister_datelastlogin_date)VALUES(“'。$ user_id。 '“,”'。$ first_name。'“,”'。$ second_name。'“,”'。$ date。'“,”'。$ date。'“); 你给出了正确的日期格式吗?这可能是问题所在。否则语法都很好。