第一次发布到StackOverflow,但我在这里的评论已经很久了。
我遇到了几个小时后我无法弄清楚的编程错误,并且在问题和答案中找不到任何似乎适用的内容,所以这是我的第一篇文章!
我使用PHP和MySQLi预处理语句将源自文件的数据插入数据库,并将文件中的每条记录存储到一个数组($ dbData [])中,该数组传递给执行的函数数据库存储。我检查了每个记录的所有四个索引的数组值,并且数据存在于所有记录字段中,尽管在一些字符串中有很多斜杠(向前和向后),撇号,引号(单和双)和html标记内容。
$ dbData数组与插入表中的列相关联。 该表被称为"内容"并且它对第二列有一个约束,它不能为null。它命名为' 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)列&#39; CText&#39;不能为空 CText:{此处打印的数据在字符串内容中显示为行返回后被截断}
我的问题是绑定是否可能与某些字符有问题,例如换行/回车或其他组合。我没有在代码中设置字符编码,因此默认编码正在使用中。
答案 0 :(得分:2)
绑定是否可能与某些字符有问题,例如换行/回车或其他组合。
没有。绑定没有问题。出现此类错误消息的唯一原因是数据为空时。
这是解决所有类问题的简单清单。
无论如何,如果您仍然认为存在错误 - 请创建一个隔离,可重复执行的代码示例。意味着不仅要创建不可操作的草图以向读者展示,而且是一个完整的工作示例,任何人都可以重现。如
$mysqli = new mysqli("example.com", "user", "password", "database");
$mysqli->query("CREATE TABLE content ...");
$queryText = "insert into content values (?, ?, ?, ?)";
$query = $mysqli->prepare($queryText);
$dbData[0] = 0;
$dbData[1] = 'some text that yo think is causing the error';
$dbData[2] = 0;
$dbData[3] = 'some another text';
$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];
}
没有循环。没有任何未显示的代码 - 但是一个产生指出错误的完整的工作示例。
使用这样的示例失败后,开始调试代码,找到程序流程或调试方式的逻辑错误。
你必须意识到这样的问题(&#34;我在明天的天空中有一个PHP的错误&#34;)如果没有可重现的例子,就不能有另一个接收。