主键 - php中mysql重复插入没有捕获到异常?

WBOY
發布: 2016-06-06 20:12:06
原創
1286 人瀏覽過

<code> function sql_add($name,$db_handle)
    {
        try{ 
            $statement = $db_handle->prepare
            (
                'INSERT INTO qiangpiao(name,xuehao,xiaoqu,zuoweihao,time) VALUES (:name,:xuehao,:xiaoqu,:zuoweihao,:time)'
            );
            $number = $db_handle->prepare
            (
                'select count(1) from qiangpiao'  
            );
            $number->execute();
            /*变量的定义*/
            $matches = array();
            $matches = fenci($name);
            $name = $matches[1];
            $xuehao = $matches[2];
            $xiaoqu = $matches[3];
            $zuoweihao = $number->fetch();//通过数据库来增加数据
            echo $zuoweihao[0];
            echo "\n";
            $time = date("Y-m-d H:i:s",time());
            echo $time;

            /*数据绑定*/
            $statement->bindParam(':name',$name);
            $statement->bindParam(':xuehao',$xuehao);
            $statement->bindParam(':xiaoqu',$xiaoqu);
            $statement->bindParam(':zuoweihao',$zuoweihao[0]);
            $statement->bindParam(':time',$time);
            $statement->execute(); 
            return;
        }catch(PODException $e){
            echo $e->getMessage(); 
        }
    }</code>
登入後複製
登入後複製

在数据库中,我设置了主键为学号,重复的话应该会返回一个异常,但我没有捕获到异常,是什么原因,有没有什么解决方法。

回复内容:

<code> function sql_add($name,$db_handle)
    {
        try{ 
            $statement = $db_handle->prepare
            (
                'INSERT INTO qiangpiao(name,xuehao,xiaoqu,zuoweihao,time) VALUES (:name,:xuehao,:xiaoqu,:zuoweihao,:time)'
            );
            $number = $db_handle->prepare
            (
                'select count(1) from qiangpiao'  
            );
            $number->execute();
            /*变量的定义*/
            $matches = array();
            $matches = fenci($name);
            $name = $matches[1];
            $xuehao = $matches[2];
            $xiaoqu = $matches[3];
            $zuoweihao = $number->fetch();//通过数据库来增加数据
            echo $zuoweihao[0];
            echo "\n";
            $time = date("Y-m-d H:i:s",time());
            echo $time;

            /*数据绑定*/
            $statement->bindParam(':name',$name);
            $statement->bindParam(':xuehao',$xuehao);
            $statement->bindParam(':xiaoqu',$xiaoqu);
            $statement->bindParam(':zuoweihao',$zuoweihao[0]);
            $statement->bindParam(':time',$time);
            $statement->execute(); 
            return;
        }catch(PODException $e){
            echo $e->getMessage(); 
        }
    }</code>
登入後複製
登入後複製

在数据库中,我设置了主键为学号,重复的话应该会返回一个异常,但我没有捕获到异常,是什么原因,有没有什么解决方法。

PODException好像只会在new POD的时候抛出,其他时候都得判断execute()的返回值来确定操作是否成功,并通过errorCode()errorInfo()来获取错误的信息……

默认不把错误当异常抛出,你需要使用 errorCode() 来判断是否执行成功。
你可以设置
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
这样来使得 SQL 执行出错的时候抛出异常。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!