第一次發佈到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個字符,存儲在綁定使用的數組中。 –