MySQL 不接受超过 350 个字符的数据


MySQL wont accept data longer than 350 chars?

我有一个表单,用户可以在其中提交他们的反馈。如果他们的反馈少于 60-70 字,一切正常。当反馈超过限制时,它会引发错误。

我使用以下命令创建我的表:

CREATE TABLE RECORDS (ID INT NULL PRIMARY KEY, AUTO_INCREMENT, NAME VARCHAR(100), OFF VARCHAR(100), PROBLEM VARCHAR(1000));

如果反馈是大约 5-10 个单词,则接受。我的PHP:

$dbh = new PDO ("mysql:host=localhost; dbname=reports", "root", "sd22");
$dbh2 = new PDO ("mysql:host=localhost; dbname=sreports", "root", "sd22");
   } catch (PDOException $e) {                                 
       server_misconfig ();                                                                            }

       $log_uhashD = $dbh -> exec ("INSERT INTO `RECORDS` (`name`, `officer`, `problem`) VALUES ('$cname', '$vname', '$tarea')");
       $log_hashD = $dbh2 -> exec ("INSERT INTO `SRECORDS` (`name`, `officer`, `problem`) VALUES ('$hcname', '$hvname', '$tarea')");
    while (!$log_uhashD == '1') {
               db_logfail ();
               die();
           }
           while (!$log_hashD == '1') {
               db_logfail ();
               die();
           }

        $dbh = null;                
        $dbh2 = null;               
        JewelWrap ();

我的表格:

<div id="jewel-Report">
    <form action="record_report.php" method="post">
        <div id="jewel-cName"><p>Your name:&nbsp;</p>
            <input type="text" name="jewel-cName" autocomplete="off">
            <div id="jewel-vName"><p>OFF:&nbsp;</p>
                <input type="text" name="jewel-vName" autocomplete="off"></div>
                <div id="jewel-tArea"><p>Describe your problem:&nbsp;</p><textarea rows="10" cols="50" name="jewel-tArea"></textarea></div>
                <button name="jewel-submit" type="submit">Submit</button>
                </form>
            </div>

你说这是你得到的错误:

我收到此错误: PDO::errorInfo((: 数组 ( [0] => 42000 [1] => 1064 [2] => 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在 保存数据的能力附近使用的正确语法。我们认为,限制和强加 ' 在第 1 行(

这表明文本中的撇号——可能是所有格,类似于"该人持有数据的能力"——正在导致您的陈述被终止。

所以,问题是我(和Juergen d(认为的:你实际上没有清理你的输入。您需要转义这些撇号,否则查询引擎会将它们视为右引号,终止字符串文字,并将字符串中的其余文本馈送到查询解析器中,就好像它是 SQL 一样。

最好的方法是使用 PDO 准备语句来绑定参数,而不是尝试使用字符串操作将它们拼接到 SQL 语句中。

尝试使用类型文本而不是 varchar(1000(

CREATE TABLE RECORDS (ID INT NULL PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(100), OFF VARCHAR(100), PROBLEM TEXT);

您运行的是哪个版本的MySQL,您使用的是什么字符集?由于MySQL4在字符长度方面有不同的方法,因此可以保存特殊(utf8(字符。