gpt4 book ai didi

php - 您的 SQL 语法有误;检查与您的 MySQL 服务器版本对应的手册,了解在第 2 行的 '' '')' 附近使用的正确语法

转载 作者:可可西里 更新时间:2023-11-01 07:11:11 26 4
gpt4 key购买 nike

我在 MySQL 中遇到错误:

You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near '''')' at line 2'.

HTML代码:

<form action="read_message.php" method="post">
<table class="form_table">
<tr>
<td style="font-weight:bold;">Subject:</td>
<td><input style=" width:300px" name="form_subject"/></td>
<td></td>
</tr>
<tr>
<td style="font-weight:bold;">Message:</td>
<td id="myWordCount">&nbsp;(300 words left)</td>
<td></td>
</tr>
<tr>
<td><input type="hidden" name="sender_id" value="<?php echo $sender_id?>"></td>
<td><textarea cols="50" rows="4" name="form_message"></textarea></td>
<td valign="bottom"><input type="submit" name="submit_message" value="send"></td>
</tr>
</table>
</form>

插入 mysql 表的代码:

<?php
include_once"connect_to_mysql.php";
//submit new message
if($_POST['submit_message']){

if($_POST['form_subject']==""){
$submit_subject="(no subject)";
}else{
$submit_subject=$_POST['form_subject'];
}
$submit_message=$_POST['form_message'];
$sender_id = $_POST['sender_id'];
if($shortMessagesLeft<1){
$form_error_message='You have left with '.$shortMessagesLeft.' Short Message. Please purchase it from the <a href="membership.php?id='.$id.'">shop</a>.';
}
else if($submit_message==""){
$form_error_message = 'Please fill in the message before sending.';
}
else{
$message_left = $shortMessagesLeft-1;
$update_short_message = mysql_query("UPDATE message_count SET short_message = '$message_left' WHERE user_id = '$id'");
$sql = mysql_query("INSERT INTO private_messages (to_id, from_id, time_sent, subject, message)
VALUES('$sender_id', '$id', now(),'$submit_subject','$submit_message')") or die (mysql_error());
}
}

?>

错误是什么意思,我做错了什么?

最佳答案

$submitsubject$submit_message 中有单引号

为什么这是个问题?

单引号 char 终止 MySQL 中的字符串以及被视为 sql 命令的所有内容。你真的不想那样写你的sql。最好的情况是,您的应用程序会间歇性地中断(如您所观察到的那样),最坏的情况是,您刚刚引入了一个巨大的安全漏洞。

想象一下,如果有人提交了 '); DROP TABLE private_messages; 在提交消息中。

您的 SQL 命令将是:

INSERT INTO private_messages (to_id, from_id, time_sent, subject, message) 
VALUES('sender_id', 'id', now(),'subjet','');

DROP TABLE private_messages;

相反,您需要正确清理您的值(value)观。

至少你必须通过 mysql_real_escape_string() 运行每个值,但你真的应该使用准备好的语句。

如果您使用 mysql_real_escape_string(),您的代码将如下所示:

if($_POST['submit_message']){

if($_POST['form_subject']==""){
$submit_subject="(no subject)";
}else{
$submit_subject=mysql_real_escape_string($_POST['form_subject']);
}
$submit_message=mysql_real_escape_string($_POST['form_message']);
$sender_id = mysql_real_escape_string($_POST['sender_id']);

这是一个great article关于准备好的陈述和 PDO。

关于php - 您的 SQL 语法有误;检查与您的 MySQL 服务器版本对应的手册,了解在第 2 行的 '' '')' 附近使用的正确语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11093634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com