求教關於PDO使用的有關問題

來源:互聯網
上載者:User
求教關於PDO使用的問題
相關的資料庫是這樣的:

CREATE TABLE `session` (
`skey` char(32) CHARACTER SET ascii NOT NULL,
`data` text COLLATE utf8mb4_bin,
`expire` int(11) NOT NULL,
PRIMARY KEY (`skey`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;


相關的PHP代碼大致如下(,我隱藏掉了一些無關的代碼):

define('DNS', 'mysql:host=localhost;dbname=db;charset=utf8mb4');
define('USR', 'usr');
define('PWD', 'pwd');
define('MAXLIFETIME', 1440);

function write($id, $data) {
try {
$dbh = new PDO(DNS, USR, PWD, array(
PDO::ATTR_PERSISTENT => TRUE,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => FALSE
));
try {
$expire = time() + MAXLIFETIME;
$sql = 'INSERT INTO `session` (`skey`, `data`, `expire`) '
. 'VALUES (:skey, :data, :expire) '
. 'ON DUPLICATE KEY UPDATE '
. '`data` = :data, `expire` = :expire';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':skey', $id, PDO::PARAM_STR);
$stmt->bindValue(':data', $data, PDO::PARAM_STR);
$stmt->bindValue(':expire', $expire, PDO::PARAM_INT);
$stmt->execute();
$dbh = NULL;
} catch (Exception $e) {
echo $e->getTraceAsString();
}
} catch (Exception $e) {
echo $e->getTraceAsString();
}
}

write('12345678', '87654321');


其中的關鍵似乎在

PDO::ATTR_PERSISTENT => TRUE,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,

這兩句上。

只有注釋掉這兩句,運行OK,這兩句中的任何一句生效,則發生異常。
請問,這是什麼情況?求指點。
------解決方案--------------------
資料插進去了麼,異常資訊列印出來看看,還有try 裡面 嵌套try 似乎沒有這種寫法。
------解決方案--------------------
你的 SQL 指令需要 5 個參數,而你只給了 3 個!
echo $e->getTraceAsString();
改為
echo $e->getMessage() ;
你就可以看到:
Error!: SQLSTATE[HY093]: Invalid parameter number

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
啟用異常處理模式
注釋掉就是按預設錯誤處理模式,可通過 errorInfo 取得錯誤資訊

PDO::ATTR_PERSISTENT => TRUE,
啟用長串連
只在複用串連時會拋出異常
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.