为参数输入值时出现SQL语法错误

时间:2013-12-06 08:16:53

标签: php mysql

我有这行代码使用绑定将数据输入数据库:

$mysql = "INSERT INTO Orders (`Name`, `Recipient`, `Destination`, `Room`, `Message`, `Anonymous`, `OffCampus`, `OffCampusAddress`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";

$stmt = mysqli_prepare($con,$mysql);

奇怪的是,只有在html表单中输入列Recipient的值时才会出现此错误。如果在该字段中没有输入任何内容,则可以错误是:

mysqli错误:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的“0”附近使用正确的语法

有人能告诉我为什么输入参数值会导致MySQL语法错误吗?在此先感谢,如果很明显,我很抱歉,我是网络开发的新手。

这是我的约束力:

  mysqli_stmt_bind_param($stmt, 'ssssssss', $name, $recipient, $destination, $room, $message, $anonymous, $offcampus, $offcampusaddress);    

1 个答案:

答案 0 :(得分:-1)

我认为你应该像我的下面的代码那样做。

$mysqli = new mysqli('localhost', 'root', '', 'DBNAME');

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = $mysqli->prepare("INSERT INTO Orders (`Name`, `Recipient`, `Destination`, `Room`, `Message`, `Anonymous`, `OffCampus`, `OffCampusAddress`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");

$stmt->bind_param("sssdssss", $Name, $Recipient, $Destination, $Room, $Message, $Anonymous, $OffCampus, $OffCampusAddress);

$Name= 'DEU';
$Recipient= 'Bavarian';
$Destination= "XYZ";
$Room= 15;
$Message= 'May I help you';
$Anonymous= 'i do not know';
$OffCampus= "YY";
$OffCampusAddress= "Known Street";

/* execute prepared statement */
$stmt->execute();

printf("%d Row inserted.\n", $stmt->affected_rows);

/* close statement and connection */
$stmt->close();

在绑定参数(sssdssss)中表示您作为输入给出的参数类型。 s表示字符串值,d表示十进制值。 我保持sssdssss因为,d是十进制,即没有:房间,这种类型是第一个,如果在你的数据库中,你保持varchar,所以你可以将d转换为s。 你在问题中写错了句法,即

mysqli_stmt_bind_param($stmt, 'ssssssss', $name, $recipient, $destination, $room, $message, $anonymous, $offcampus, $offcampusaddress); 

希望它会对你有所帮助。

由于