2
我已經成功地使我的symfony應用程序使用realestateconz/mssql-bundle和免費TDS連接到MSSQL數據庫。PDO dblib沒有捕獲警告
我的問題是,當我嘗試執行一個存儲過程時,該過程拋出一個異常,如果出現問題,但PDO報告什麼都沒有回來。
如果我使用mssql_ *函數做同樣的事情,我會從MSSQL得到正確的錯誤消息的警告。
什麼是PDO的做法不同?
下面是兩個代碼示例;
//PDO Version
try {
$conn = new PDO($dsn, $user, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
var_dump($e->getMessage());
die;
}
$stmt = $conn->prepare("INSERT INTO importex_parteneri (id_importex, cif_cnp, denumire) VALUES (1, 9671891, 'Nexus Media')");
$result = $stmt->execute();
var_dump($result); //true
$stmt = $conn->prepare("exec dbo.importex_parteneri_exec 1");
$result = $stmt->execute();
var_dump($result); //true
的mssql_ *例如
$connection = mssql_connect($server, $user , $pass);
mssql_select_db($nexus_bazadate, $connection);
$result = mssql_query("INSERT INTO importex_parteneri (id_importex, cif_cnp, denumire) VALUES (1, 9671891, 'Nexus Media')");
var_dump($result);
$result = mssql_query("exec dbo.importex_parteneri_exec 1");
var_dump($result);
/*
* The output is
*
* bool(true)
PHP Warning: mssql_query(): message: Error 50000, Level 16, State 1, Procedure importex_parteneri_exec, Line 181, Message: PRT012 - Eroare import par9671891 (severity 16) in /home/vagrant/cv.dev/web/test.php on line 19
PHP Warning: mssql_query(): General SQL Server error: Check messages from the SQL Server (severity 16) in /home/vagrant/cv.dev/web/test.php on line 19
bool(true)
*/
SOLUTION
我最終加入了wraper各地PDO ::執行函數功能
execute(\PDOStatement $stmt, array $params = array())
{
$result = $stmt->execute($params);
$err = $stmt->errorInfo();
switch ($err[0]) {
case '00000':
case '01000':
return true;
default:
//case HY000
return false;
}
}
謝謝。我仍然很奇怪,在errInfo中,我得到HY000 SQL狀態,錯誤代碼爲50000,消息爲General SQL Server錯誤:檢查來自SQL Server [50000](嚴重性16)[(null)]的消息。 但是,PDO說沒關係。 – Stev
請記住,我們正在談論**警告**。如果他們造成腳本中止,他們就不會如此行事。 –
我收到的SQL狀態是HY000,它是一般的SQL Server錯誤。所以這不是SQL方面的警告。 PDO應該將其視爲錯誤。 (dbutil.c:85):_ dblib_handle_info_message(0x2ee1b20,0x4347450,0x7ffd5cd22bf0) 10:53:06.860421 3782(dbutil.c:86):msgno 50000可能是免費的TDS可以處理這個錯誤: 10:53:06.860418 3782 :「錯誤50000,級別16,狀態1,過程importex_parteneri_exec,行23,消息:PRT001 - Eroare導入parteneri:Lipsa日期」 – Stev