您的位置:首页 > 编程语言 > PHP开发

php中嵌入的sql语句长度问题

2017-05-14 13:51 281 查看
这个问题花费了我长达18小时,从昨天中午开始到现在,折腾的我茶饭不思。

问题是这样的,php编写的API接收到来自前端的N个数据,然后通过sql插入到数据库中,我本来是这样写的。

$stmt = $this->conn->prepare("INSERT INTO mocaresult(userID, upload,  checkdate, matchtest, copydraw, clockoutline, clocknum, clockpoint,name1, name2,
name3, reciteinorder, recitereverse, knock1, minus7first, minus7second, minus7third, minus7forth, minus7fifth) VALUES(?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?)");
$stmt->bind_param("ssssssss", $userID, $upload, $checkdate, $matchtest, $copydraw, $clockoutline, $clocknum, $clockpoint, $name1, $name2, $name3,
$reciteinorder, $recitereverse, $knock1, $minus7first, $minus7second, $minus7third, $minus7forth, $minus7fifth);
$result = $stmt->execute();
$stmt->close();
但是不行,数据库中并没有插入进去,我花了5个小时排查前端的问题,没有任何问题,搞得我怀疑人生了。之后我直接把高中的控制变量法用到极致了, 和与这个功能几乎一致的一个功能进行对比,发现前端没有丝毫问题,同样的前端我把数据写进另一个api中就没有任何问题,终于把前端的问题排除了。

过了很久,我把php中的sql字段删除到8个(不要问我为什么是8个,我快疯了一个一个减少的),发现insert into 表名 (8个字段)values (8个?),这样是可以插入的,9个就不行。

WTF?EXO me?

我从网上搜了好久,也翻墙出去搜,压根没人遇到我这种问题。

我最后换了种写法。

$stmt = $this->conn->prepare("INSERT INTO mocaresult(userID, upload,  checkdate, matchtest, copydraw, clockoutline, clocknum, clockpoint,
name1, name2, name3, reciteinorder, recitereverse, knock1, minus7first, minus7second, minus7third, minus7forth, minus7fifth)
VALUES('".$userID."', '".$upload."', '".$checkdate."', '".$matchtest."', '".$copydraw."', '".$clockoutline."', '".$clocknum."',
'".$clockpoint."', '".$name1."', '".$name2."', '".$name3."', '".$reciteinorder."', '".$recitereverse."', '".$knock1."',
'".$minus7first."', '".$minus7second."', '".$minus7third."', '".$minus7forth."', '".$minus7fifth."')");
哦,终于可以了。我至今搞不懂为什么用?然后绑定变量这种方式,长度不能超过8,是我电脑的问题吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 数据库 api sql 数据