PHP代码无法添加到数据库

时间:2014-10-16 19:32:08

标签: php html

我正在为我的雇主编写一些内部CMS的脚本,它只是基础,但摆脱了大量令人讨厌的excel电子表格,它提供了更多的灵活性和选项。

我今天遇到的问题是我有一个脚本根据用户表单输入写入数据库。

我已成功完成了一个名为customers的表,但我正在尝试创建一个名为ncr的表,但由于某种原因,脚本运行但没有信息输入到数据库中。

 NCR: input type="text" name="NCR"
 Project: input type="text" name = "Project"
 Raised By: input type="text" name = "Raised"
 Date: input type="text" name = "Date"
 Pasts Affected: input type="text" name = "Parts"
 Description: input type="text" name = "Description"
 Corrective Action Taken: input type="text" name = "Action
 Components Returned to Spec: input type="text" name = "Rtn_Spec"
 Concession Applied For: input type="text" name = "Concession"
 Corrective Action Approved By: input type="text" name = "CR_By"
 Reviewed For Preventative Actions By: <input type="text" name = "Review_By"
 Preventative Actions Taken: input type="text" name = "Actions_tk"
 Preventative Actions Approved By: <input type="text" name = "Actions_Apr"
 NCR Closed Out?: input type="text" name = "Closed"
 Date Closed: input type="text" name = "Date_Clsd"
 Closed Out By: input type="text" name = "Clsd_By"

这是我的脚本

$NCR=$_POST['NCR'];
$Project=$_POST['Project'];
$Raised=$_POST['Raised'];
$Date=$_POST['Date'];
$Parts=$_POST['Parts'];
$Descr=$_POST['Descr'];
$Action=$_POST['Action'];
$Rtn_Spec=$_POST['Rtn_Spec'];
$Concession=$_POST['Concession'];
$CR_By=$_POST['CR_By'];
$Review_By=$_POST['Review_By'];
$Actions_tk=$_POST['Actions_tk'];
$Actions_Apr=$_POST['Actions_Apr'];
$Closed=$_POST['Closed'];
$Date_Clsd=$_POST['Date_Clsd'];
$Clsd_By=$_POST['Clsd_By'];

// (database connection details go here)

mysql_query(
    "INSERT INTO 'ncr' 
     VALUES ('$NCR', '$Project', '$Raised',
             '$Date','$Parts', '$Descr', 
             '$Action', '$Rtn_Spec', '$Concession',
             '$CR_By', '$Review_By', '$Actions_tk',
             '$Actions_Apr', '$Closed', '$Date_Clsd',
             '$Clsd_By')
    ");

Print "Your information has been successfully added to the database.";

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

mysql_query("INSERT INTO 'ncr' VALUES ('$NCR', [..snip..]
                         ^^^^^

您引用了表名,将其转换为字符串 - 不再是表名。要么使用反引号,要么根本没有引号 - ncr不是mysql中的保留字,所以引用它绝对没有意义:

mysql_query("INSERT INTO `ncr` VALUES ('$NCR', [..snip..]
mysql_query("INSERT INTO ncr VALUES ('$NCR', [..snip..]

这两个都是可以接受的。并注意上面的评论。这应该可以解决您的问题,但仍然会给您留下大量其他更大的问题。

答案 1 :(得分:0)

首先,我们需要使用mysql_以外的库,例如mysqli_pdo

对于此示例,我们将使用mysqli_,因为它可能是mysql_mysqli_之间更平滑的过渡。

$mysql = new mysqli('host', 'username', 'password', 'database');

这对你来说应该是非常熟悉的,给出它所有与你当前连接相同的信息,但数据库除外,它作为参数传递。

接下来,您对'ncr'表的查询中出现错误,您已将其转换为字符串。鉴于这是一个表名,ncr应该出现'封装。此外,唯一一次你应该使用反引号封装,它是自己保留的单词,是否有特殊字符,或者是否有空格。

现在让我们进入查询:

$stmt = $mysqli->prepare("INSERT INTO ncr VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

每个?表示我们必须稍后bind反对的变量的位置。请注意:

$stmt->bind_param('ssssssssssssssss', $NCR, $Project, $Raised,$Date,$Parts, $Descr, $Action, $Rtn_Spec, $Concession, $CR_By, $Review_By, $Actions_tk, $Actions_Apr, $Closed, $Date_Clsd, $Clsd_By);

在上文中,我们确定了我们希望绑定的16个变量。 s代表string,以便引擎知道如何处理数据。必须对我们绑定的每个变量重复此操作,如果它们是整数,我们将使用i代替。

现在我们已经绑定了参数,我们可以执行查询:

$stmt->execute();

现在数据已存储在数据库中。