使用php和mysql与变量时插入INTO

时间:2013-04-07 17:46:36

标签: php mysql

这是代码。出现的错误是“字段列表'中的未知列$ idUsager”。但该专栏确实存在。

php代码:

$idUsager = $_POST['idUsager'];
$secMoment = $_POST['secMoment'];
$aire = $_POST['aire'];
$longueur = $_POST['longueur']; 
$idMateriau = $_POST['idMateriau']; 

//I connect to db and everything works properly here. Also, all variables contain numeric values only. No strings.

$query='INSERT INTO lesPoutres(idPoutre,idUsager,secMoment,aire,longueur,idMateriau)        
        VALUES(null,$idUsager,$secMoment,$aire,$longueur,$idMateriau)';

$result=mysql_query($query, $lien_bd);
  if (!$result) {
    print("<strong>Erreur lors du traitement de la requ&ecirc;te : </strong>" . mysql_error());

  exit();
  }

这是mysql表:

+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| idPoutre   | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| idUsager   | int(10) unsigned | NO   |     | NULL    |                |
| secMoment  | float unsigned   | NO   |     | NULL    |                |
| aire       | float unsigned   | NO   |     | NULL    |                |
| longueur   | float unsigned   | NO   |     | NULL    |                |
| idMateriau | int(5) unsigned  | NO   |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+

3 个答案:

答案 0 :(得分:1)

您需要将输入数据括在引号中:

替换此

$query='INSERT INTO lesPoutres(idPoutre,idUsager,secMoment,aire,longueur,idMateriau)        
        VALUES(null,$idUsager,$secMoment,$aire,$longueur,$idMateriau)';

用这个

$query="INSERT INTO lesPoutres(idPoutre,idUsager,secMoment,aire,longueur,idMateriau)        
        VALUES(null,'$idUsager','$secMoment','$aire','$longueur','$idMateriau')";

也使用mysqli或PDO。 mysql_ *函数是折旧的。

在插入之前还要转义变量以防止SQL注入

$idUsager = mysql_real_escape_string($_POST['idUsager']);
$secMoment = mysql_real_escape_string$_POST['secMoment']);
$aire = mysql_real_escape_string$_POST['aire']);
$longueur = mysql_real_escape_string$_POST['longueur']); 
$idMateriau = mysql_real_escape_string$_POST['idMateriau']);

有关mysqli和PDO的更多信息,请访问:http://php.net/manual/en/book.mysqli.phphttp://php.net/manual/en/book.pdo.php

答案 1 :(得分:0)

<强>解决方案

将变量嵌入字符串时需要使用"

替换

$query='INSERT INTO lesPoutres(idPoutre,idUsager,secMoment,aire,longueur,idMateriau)        
    VALUES(null,$idUsager,$secMoment,$aire,$longueur,$idMateriau)';

$query="INSERT INTO lesPoutres(idPoutre,idUsager,secMoment,aire,longueur,idMateriau)        
    VALUES(null,$idUsager,$secMoment,$aire,$longueur,$idMateriau)";

注意

mysql_*函数已弃用,将被删除。我建议您改用mysqliPDO

Sql注入

您的脚本容易受到sql注入攻击。您应该使用mysql_real_escape_string

$idUsager = mysql_real_escape_string($_POST['idUsager']);
$secMoment = mysql_real_escape_string($_POST['secMoment']);
$aire = mysql_real_escape_string($_POST['aire']);
$longueur = mysql_real_escape_string($_POST['longueur']); 
$idMateriau = mysql_real_escape_string($_POST['idMateriau']); 

答案 2 :(得分:-1)

试一下

$idUsager = $_POST['idUsager'];
$secMoment = $_POST['secMoment'];
$aire = $_POST['aire'];
$longueur = $_POST['longueur']; 
$idMateriau = $_POST['idMateriau']; 

//I connect to db and everything works properly here. Also, all variables contain numeric values only. No strings.

$query="INSERT INTO lesPoutres VALUES (null,'$idUsager','$secMoment','$aire','$longueur','$idMateriau')";

$result=mysql_query($query, $lien_bd);
  if (!$result) {
    print("<strong>Erreur lors du traitement de la requ&ecirc;te : </strong>" . mysql_error());

  exit();
  }