学习PHP PDO ..想知道在涉及多个查询时使用它的正确方法

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了学习PHP PDO ..想知道在涉及多个查询时使用它的正确方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
在过去,我只想创建一个连接数据库的类,然后运行一堆方法来运行查询..就像这样:

class connectDB
{
public $db_host = "asDF.db.asdf.hostedresource.COM";
public $db_name = "asdf";
public $db_user = "asdf";
public $db_pass = "asdf!1";
public $result;

function setDB_Host($value){
 $this->db_host=$value;
}

function setDB_name($value){
 $this->db_name=$value;
}

 function setDB_user($value){
 $this->db_user=$value;
}

function setDB_pass($value){
 $this->db_pass=$value;
}

function makeConnection()
{
    $connection = MysqL_connect($this->db_host,$this->db_user,$this->db_pass) or die
    ("Unable to connect!");
    MysqL_select_db($this->db_name) or die(MysqL_error());
}

function setQuery($query)
{
    $this->result = MysqL_query($query) or die(MysqL_error());
}


    class video
    {
       public $sequence;
       public $fileName;
       public $vidTITle;
       public $vIDCat;
       public $thumbName;


function addVideo($sequence,$fileName,$vidTitle,$vidCat,$thumbName)
{
    $this->connect-> setQuery("SELECT COUNT(id) AS numrows From vids WHERE vidCat = '$vidCat'");
    $row = MysqL_fetch_array($this->connect->result);
    $sequence = $row['numrows'] + 1;
    $this->connect->setQuery("INSERT INTO vids (sequence,fileName,vidTitle,vidCat,thumbName) VALUES ('$sequence','$fileName','$vidTitle','$vidCat','$thumbName') ");

}

    function addKeypoints($keypoints,$mins,$secs)
{
        $v_id = MysqL_insert_id();

    for ($i=0; $i<sizeof($keypoints); $i++)
    {       
        $totalsecs = ($mins[$i]*60) + $secs[$i];
        $this->connect->setQuery("INSERT INTO keypoints (v_id,totalsecs,keypoints,mins,secs) VALUES ('$v_id','$totalsecs','$keypoints[$i]','$mins[$i]','$secs[$i]') ");
    }

}

不想读所有这些.基本上我只是运行一堆访问我的第一个类的方法,并运行查询.我不明白这在PDO环境中是如何工作的. PDO应该让这种事情变得更容易,因为它是基于OOP的……正确吗?

$hostname = "aaa.db.7149468.aaa.com";
    $username = "coolcaaaaodez";
    $password = "aaaa";

    try
    {
$dbh = new PDO("MysqL:host=$hostname;dbname=coolcodez",$username,$password);
$dbh->setattribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$stmt = $dbh->PRepare("INSERT INTO links (link,cool,difficulty) values (:link,:cool,:difficulty)");

$stmt->bindParam(':link',$_POST['link']);
$stmt->bindParam(':cool',$_POST['cool']);
$stmt->bindParam(':difficulty',$_POST['difficulty']);

if(isset($_POST['submit-links']))
{
    $stmt->execute();
    echo "row added <br />";
}
    }
   catch(PDOException $e)
   {
        echo $e->getMessage();
   }

基本上我要问的是..尝试/捕捉的东西真的让我感到高兴.是否只需将连接本身放入try / catch块中,然后我可以在属于某个类的每个方法中准备查询或者每个事件序列(数据库连接,查询,结果等)都需要卡在try / catch块中. PDO对我的需求有点花哨,但我正在努力学习,并且我想知道在涉及大量查询时编写它的最佳通用方法.

解决方法

是的……在某种程度上.
作为优秀的工具,OOP需要一些使用技巧 – 只有这样才能使事情更容易.否则,它将使事情变得更加艰难.

实际上,您需要的所有代码都是

if(isset($_POST['submit-links']))
{
    require 'pdo.PHP';
    $sql  = "INSERT INTO links (link,difficulty) values (?,?,?)";
    $data = array($_POST['link'],$_POST['cool'],$_POST['difficulty']);
    $dbh->prepare($sql)->execute($data);
}

其余的代码是多余的,原因有两个:

>当然,数据库连接代码应该存储在一个单独的文件中并包含在所有其他文件中,而不是每次都重复.可以在PDO tag wiki中找到连接代码一个很好的示例
>这种尝试捕获的东西,确实让许多缺乏经验的开发人员感到困惑.事实上,你根本不需要它 – 或者至少不是这种形式.仅仅因为PHP可以自己处理错误(并且比普通的PHP用户做得更好,说实话).所以,你可以省略这个try / catch的东西.进一步阅读:The (im)proper use of try..catch.

脚本宝典总结

以上是脚本宝典为你收集整理的学习PHP PDO ..想知道在涉及多个查询时使用它的正确方法全部内容,希望文章能够帮你解决学习PHP PDO ..想知道在涉及多个查询时使用它的正确方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。