解决方案 »
- php给文章加关键字连接,文章内容自动加链接效果 怎样控制链接次数?
- 在普通的textare中如何添加一个表格形式,并将此表格原貌显示在页面中??
- PHP菜鸟问题,请高手指教 关于类的调用
- 怎么实现点击一个按钮出现浏览文件的窗口啊
- 每刷新一次增加一条上一次的留言(怎么解决?)
- 请教Web IM如何实现?
- 谁知道php dbx_query的原码?
- 如何获得当前页面的地址,包括问号后面的参数
- PHP中如何实现 服务器端调用执行客户端程序
- 两个文件如何对比,谢谢
- Parse error: syntax error, unexpected 'echo' (T_ECHO) in ../L.php on line 29
- 求助!为什么连上MYSQL数据库连不上表格
异常信息大概是这样的:
#0 /***************/pdo.php(23): PDOStatement->execute() #1 /****************/pdo.php(33): write('12345678', '87654321') #2 {main}
谢谢您指点,关于异常的处理,刚刚接触 :( 。
异常,主要应该是$stmt->execute();那一句。以为对异常处理不熟悉,所以,还不大知道怎么打印更详细的异常信息。
代码如下:<?phpini_set('display_errors', '1');
error_reporting(-1);define('DNS', 'mysql:host=localhost;dbname=ping_brand;charset=utf8mb4');
define('USR', 'root');
define('PWD', '123456');
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
)); $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();
}
}write('12345678', '87654321');
异常信息如下:
#0 /Library/WebServer/Documents/php/phplearn/pdo.php(28): PDOStatement->execute() #1 /Library/WebServer/Documents/php/phplearn/pdo.php(35): write('12345678', '87654321') #2 {main}
echo $e->getTraceAsString();
改为
echo $e->getMessage() ;
你就可以看到:
Error!: SQLSTATE[HY093]: Invalid parameter numberPDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
启用异常处理模式
注释掉就是按默认错误处理模式,可通过 errorInfo 取得错误信息PDO::ATTR_PERSISTENT => TRUE,
启用长连接
只在复用连接时会抛出异常
. 'VALUES (:skey, :data, :expire) '
. 'ON DUPLICATE KEY UPDATE'
. '`data` = :data_updata, `expire` = :expire_updata';
$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->bindValue(':data_updata', $data, PDO::PARAM_STR);
$stmt->bindValue(':expire_updata', $expire, PDO::PARAM_INT);
看起来不能这么做。关于原本的错误代码,为啥在初始化PDO对象的时候使用PDO::ATTR_PERSISTENT => TRUE,会导致异常呢?
关于“复用连接”的说法,是啥地方构成了复用连接呢?再次感谢。