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

时间:2014-11-28 16:05:23

标签: php mysql

我有一个用户可以提交反馈的表单。 如果他们的反馈少于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>

3 个答案:

答案 0 :(得分:0)

尝试使用文字而不是 varchar(1000)

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

答案 1 :(得分:0)

你说这是你得到的错误:

  

我收到此错误:PDO :: errorInfo():Array([0] =&gt; 42000 [1] =&gt; 1064 [2] =&gt;您的SQL语法有错误;请查看手册对应于您的MySQL服务器版本,以便使用接近保存数据的能力的正确语法。我们相信第1行的限制和拼版

这表明文本中的撇号 - 可能是占有性,类似于“人持有数据的能力” - 导致你的陈述被终止。

所以,问题是我(和juergen d)认为的问题:你实际上正在消毒你的输入。您需要转义那些撇号,否则查询引擎会将它们视为结束引号,终止字符串文字,并将字符串中的其余文本提供给查询解析器,就好像它是SQL一样。

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

答案 2 :(得分:-1)

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