gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:41:49 26 4
gpt4 key购买 nike

在过去,我只会创建一个类来连接到数据库,然后运行一堆方法来运行查询......就像这样:

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 block 中,然后我就可以在属于一个类的每个方法中准备查询?或者每个事件序列(数据库连接、查询、结果等)是否需要卡在 try/catch block 中。 PDO 对我的需求来说有点花哨,但我正在努力学习,并且我想知道在涉及大量查询时编写它的最佳通用方式。

最佳答案

PDO should be making this sort of thing easier since it's OOP based.. correct?

是的……在某种程度上。作为一个很好的工具,OOP 需要一些使用技巧——只有这样它才会让事情变得更容易。否则,它会使事情变得更加困难。

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

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

您的其余代码是多余的,原因有二:

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

关于php - 学习 PHP PDO.. 想知道在涉及很多查询时使用它的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com