第一次发布到StackOverflow,但我一直是这里评论的很长一段时间的读者。PHP MySQLi准备语句绑定某些字符的错误?
我遇到了一个编程错误,几个小时后我找不出来,也没有找到任何似乎适用的问题和答案,所以这里是我的第一篇文章!
我使用PHP和MySQLi prepared语句将源自文件的数据插入数据库,并将每个记录从文件存储到数组($ dbData [])中,该数组传递给执行数据库存储。我检查了每个记录的所有四个索引的数组值,并且数据存在于所有记录字段中,尽管在一些字符串中有很多斜杠(向前和向后),撇号,引号(单和双)和html标记内容。
$ dbData数组与表中插入的列相关。 该表被称为“内容”,它对第二列有一个约束,它不能为空。它被命名为'CText'。
在数据数组上运行的代码是在一个循环中调用所有文件数据的函数。我正在提供下面的功能的内容,没有功能接口。为了简化目的,我包含了连接到数据库的代码,但实际创建数据库连接的代码位于该函数之外。
$mysqli = new mysqli("example.com", "user", "password", "database");
...
$queryText = "insert into content values (?, ?, ?, ?)";
$query = mysqli->prepare($queryText);
$query->bind_param('dsds',$dbData[0],$dbData[1],$dbData[2],$dbData[3]);
if (!$query->execute()) {
echo '<br>Execute failed: (' . $query->errno . ') . $query->error;
echo '<br>dbData[1]: ' . $dbData[1];
}
插入适用于大多数的$ dbData记录的数据,但我得到这个错误在少数的记录:
,可执行失败:(1048)列“CTEXT”不能为空 CTEXT:{数据在这里打印的是这似乎是在字符串内容一行返回后截断}
我的问题是绑定是否可能与某些字符的问题,像换行/回车或一些其他组合。我没有在代码中设置字符编码,因此默认编码正在使用中。
你可以使用'var_dump($ dbData [1])'在你看到错误信息的地方,当你看到它时,你也会看到那个值是什么造成了这个问题 –
var_dump显示一个字符串(51)“{内容}“。 –
内容实际上是约600个字符,存储在绑定使用的数组中。 –