2

今天早上我的插入语句有点麻烦。是的,我正在使用已弃用的 mysql_query 函数。我的插入语句如下所示:

$query3 = "INSERT INTO ".$db_prefix ." offer_det 
          (fname, lname, 10k, 14k, 18k, 21k, 22k, 24k, 925, coins, bars) 
           VALUES '".$fname."', '".$lname."', '".$_10k."', '".$_14k."', 
                  '".$_18k."', '".$_21k."', '".$_22k."', '".$_24k."', 
                  '".$_925."', '".$coins."', '".$bars."')";

$result3 = mysql_query($query3);

我的 PHP 表单值是插入语句第一部分中列出的所有变量,“fname”等。

我的变量设置为从帖子中提取,并列为进入插入的值。

我必须在变量开始之前将它们更改为下划线,我猜 PHP 不喜欢这样。

我的问题:

  1. 那些 10k、14k 等是 mysql 表行名吗?
  2. 我在这里遗漏了一个问题吗?

fname和的数据类型lname是 varchar,10k 直通条的数据类型是十进制 (7,3)。

4

4 回答 4

6

925必须使用反引号引用列名。

(`fname`, `lname`, `10k`, `14k`, `18k`, `21k`, `22k`, `24k`, `925`, `coins`, `bars`) 

您可能还需要考虑将列名更改为其他名称,以避免将来出现更多类似问题。

于 2012-10-19T11:21:23.977 回答
1

925您应该根据MySQL Schema Object names引用列名

如此正确:

$query3 = "insert into ".$db_prefix."offer_det (fname, lname, 10k, 14k, 18k, 21k, 22k, 24k, `925`, coins, bars)
values 
('".$fname."', '".$lname."', '".$_10k."', '".$_14k."', '".$_18k."', '".$_21k."', 
'".$_22k."','".$_24k."', '".$_925."', '".$coins."', '".$bars."')"; 

另一个建议:你应该逃避传入的字符串,因为 SQL 注入是一件令人讨厌的事情......

于 2012-10-19T11:23:52.590 回答
0

使用QUERY,如下所示..

$query3 = "insert into ".$db_prefix."offer_det (fname, lname, 10k, 14k, 18k, 21k, 22k, 24k, 925, coins, bars) 
       values ('$fname', '$lname', '$_10k', '$_14k', '$_18k', '$_21k', '$_22k', 
       '$_24k', '$_925', '$coins', '$bars')";
$query_exec=mysql_query($query3) or die(mysql_error());

对于插入变量,您只需要使用单个代码..

于 2012-10-19T11:26:49.367 回答
0

我可以大胆地建议改变你的实施吗?

/// put your vars in an easier to use format
$insert = array(
  'fname' => $fname,
  'lname' => $lname,
  '10k' => $_10k,
  /* and so on ...*/
);

/// considering you are using mysql_query, use it's escape function
foreach ( $insert as $field => $value ) {
  $insert[$field] = mysql_real_escape_string($value);
}

/// pull out the keys as fields and the values as values
$keys = array_keys($insert);
$vals = array_values($insert);

/// the following should auto backtick everything... however it should be
/// noted all the values will be treated like strings as you were doing anyway
$query = "INSERT INTO `" . $db_prefix . "offer_det` " . 
         "(`" . implode('`,`', $keys) . "`) " . 
         "VALUES ('" . implode("','", $vals ) .  "')";
于 2012-10-19T11:27:08.113 回答