2011-03-27 30 views
1

我使用PHP進行一些簡單的shell腳本來將現有數據轉換爲本地機器上的SQLite表。但是,當我在命令行上運行腳本時,即使INSERT函數明顯失敗(即記錄不在表格中),我也不會收到錯誤。有沒有一個明顯的解決辦法呢?如何爲失敗的sqlite插入生成基本的CLI錯誤消息?

下面的代碼是我正在使用的簡化版本(它有更多的subloops等,這使得很難追查什麼沒有被插入到表中)。例如,如果人員的姓名中有一個換行符字符,它不會被插入,但我沒有錯誤消息來確定問題。另外,我最初忘記在emp_name文本字段周圍使用單引號,並且在命令行上也沒有出現錯誤。

$db = new PDO('sqlite:mydatabase.sqlite'); 
$db->exec("CREATE TABLE employee_data (emp_id INTEGER, emp_name TEXT);");  
$db->beginTransaction(); 
foreach($people_data as $person) { 
    $db->exec("INSERT INTO employee_data VALUES ('{$person->emp_id}', '{$person->emp_name}');"); 
} 
$db->commit(); 
$db = NULL; 

謝謝! Bryan

+0

我想它也會失敗,當你遷移O'Brian ... – 2011-03-27 20:47:39

回答

0

感謝您使用PDO!

PDO默認爲無提示。 You might want to either enable Warnings mode or Exceptions mode使用setAttribute,這會導致它在發生錯誤時發牢騷。如果啓用警告模式,則還要確保您可以顯示這些警告,這可以通過其他人發佈的命令完成。

如果您想手動執行此操作,則可以在每次查詢後檢查errorCodeerrorInfo方法,其使用方法記錄在上面鏈接的錯誤模式頁面上。

0

檢查您的error_reportingphp.ini/etc/php5/cli (ubuntu/debian)

0

您應該設置error_reporting到適當的水平和display_errorsOn。 這可以通過做:

ini_set('display_errors', 'on'); 
error_reporting(E_ALL & ~E_NOTICE); 
0

您可以添加:

ini_set('error_reporting', E_ALL); 
ini_set('display_errors', true); 

在你的腳本,使錯誤報告的頂部。

也在您的php.ini文件中,您可以啓用日誌記錄到PHP錯誤日誌文件。這可能是使用CLI腳本的最簡單方法,因此您可以在另一個終端中使用tail -f

相關問題