【问题标题】:Odd Mysql issue on insert插入时出现奇怪的Mysql问题
【发布时间】:2010-10-16 05:41:39
【问题描述】:

大家好,

不确定这里发生了什么,但如果我运行这个:

$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)

名字 = varchar(30)

第二个名字 = varchar(30)

日期 = int(8)

起初我认为这是 vars 的问题,但它们完全相同,仍然不起作用。

任何帮助表示赞赏。

【问题讨论】:

  • 如果打印出$query,它包含什么?

标签: php mysql insert


【解决方案1】:

“mysql_error()”的结果是什么?请务必检查这一点,尤其是当某些东西似乎不起作用时。

另外,回显 $query 以查看它的真实外观。这可以说明问题。

【讨论】:

  • +1 这是最好的建议,本着“教人钓鱼!”的精神!
【解决方案2】:

按照@GoatRider 的建议,除了回显查询和检查mysql_error()

  1. 您是否正确地转义了您的数据?见mysql_real_escape_string()
  2. 在使用mysql_query() 时,不应以分号结束查询

【讨论】:

    【解决方案3】:

    养成使用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();
     }
    

    【讨论】:

      【解决方案4】:

      也许$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 ));
      

      【讨论】:

        【解决方案5】:

        in $query = 'INSERT INTO users (id, first_name, second_name, register_date, lastlogin_date) VALUES ("' . $user_id . '", "' . $first_name . ' ", "' . $second_name . '", "' . $date . '", "' . $date . '"); 你给出正确的日期格式吗?这可能是问题所在。否则语法一切正常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-19
          • 2020-11-30
          • 1970-01-01
          • 1970-01-01
          • 2013-08-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多