我有一堆mysql查詢在我看來,我將需要轉換爲PDO。我可以一次完成這一個查詢嗎?其他所有功能都可以繼續工作嗎?例如,如果我將1查詢轉換爲阻止所有其他MySQL查詢正常工作的PDO?我可以將mysql函數一次轉換爲一個PDO嗎?
1
A
回答
1
只要打開2個數據庫連接,一個用於mysql_*
函數,一個用於PDO,這應該沒有任何問題。
唯一的潛在缺點是兩個數據庫連接而不是一個臨時的額外開銷。
1
1
您可能要考慮的一件事是不使用「連接」腳本,而是使用更多的OOP /數據模型設置。
基本上,您將您的連接細節保存在一個單獨的文件中 - 我只是定義了一些常量,稍後我們可以在包含它的腳本中訪問這些常量。從那裏,你創建一個類,在實例化時負責建立它自己的連接。這個類將包含對應於你的典型查詢的方法,也許有一種方法可以根據需要運行原始查詢。
這樣做的好處是,您可以基本上保留現有代碼,並在您更新或替換現有腳本時,在需要的位置添加新的數據模型代碼。
作爲參考的緣故,這裏的代碼精簡版我用:
db.php中
<?php
# Set the database access information as constants.
DEFINE ('DB_USER', 'your_db_user_name');
DEFINE ('DB_PASSWORD', 'your-super-duper-secret-password');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'schema-name');
DEFINE ('DB_CONNECTION', 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME);
?>
博客,model.php
<?php
# File: blog-model.php
# Version: 1.0
# Updated: 2011.9.4
# Meta: This file contains the database access information.
# This file also establishes a connection to MySQL and selects the database.
@require_once(ROOT . DS . 'config' . DS . 'db.php');
# Utility Class
class BlogModel {
protected $pdo;
# Constructor
function __construct() {
$this->connect();
}
function __destruct() {
}
# Connect to the database
function connect() {
# Database connectivity can be a tricky beast, so I'm wrapping the entire block in a try/catch
try {
$this->pdo = new PDO(DB_CONNECTION, DB_USER, DB_PASSWORD, array(PDO::ATTR_PERSISTENT => true));
# Set character set to UTF-8 (adds support for non-ASCII languages).
# Note this can cause issues with BLOB-style fields, especially with INSERTs
$this->pdo->exec("SET CHARACTER SET utf8");
return true;
}
catch(PDOException $e) {
# Add code to write out error log and alert administrator
trigger_error("<p>Could not select the database</p>\n<p>MySQL Error: " . $e->getMessage() . "</p>");
return false;
}
}
# Run an INSERT query; that is, insert a new row (or rows) into a MySQL table
function insert($authorid, $title, $permalink, $category, $body, $tags, $abstract) {
try {
# Named parameters (prefered)
$stmt = $this->pdo->prepare(
"INSERT INTO pages
SET title = :title,
permalink = :permalink,
category = :category,
body = :body,
tags = :tags,
abstract = :abstract,
author = :authorid,
timestamp = NOW();"
);
$stmt->bindParam(':title', $title);
$stmt->bindParam(':permalink', $permalink);
$stmt->bindParam(':category', $category);
$stmt->bindParam(':body', $body);
$stmt->bindParam(':tags', $tags);
$stmt->bindParam(':abstract', $abstract);
$stmt->bindParam(':authorid', $authorid, PDO::PARAM_INT);
return $stmt->execute();
}
catch(Exception $e) {
# Add code to write out error log and email administrator
trigger_error("<p>An error occurred whilst executing your query:\n<br />MySQL Error: " . $e->getMessage() . "</p>");
return false;
}
}
# Run an UPDATE query; that is, update an existing row (or rows) in a MySQL table
function update($id, $title, $category, $body, $tags, $abstract) {
try {
# Update the project matching the supplied id
# Named parameters (prefered)
$stmt = $this->pdo->prepare(
"UPDATE pages
SET title = :title, category = :category, body = :body, tags = :tags, abstract = :abstract, lastupdated = NOW()
WHERE permalink = :id
LIMIT 1;"
);
$stmt->bindParam(':id', $id);
$stmt->bindParam(':title', $title);
$stmt->bindParam(':category', $category);
$stmt->bindParam(':body', $body);
$stmt->bindParam(':tags', $tags);
$stmt->bindParam(':abstract', $abstract);
return $stmt->execute();
}
catch(Exception $e) {
# Add code to write out error log and email administrator
trigger_error("<p>An error occurred whilst executing your query:\n<br />MySQL Error: " . $e->getMessage() . "</p>");
return false;
}
}
# Run a DELETE query; that is, remove a record (or records) from a MySQL table
function delete($id) {
try {
# Delete the project matching the supplied id
# Named parameters (prefered)
$stmt = $this->pdo->prepare("DELETE FROM pages WHERE id = :id LIMIT 1;");
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
return $stmt->execute();
}
catch(Exception $e) {
# Add code to write out error log and email administrator
trigger_error("<p>An error occurred whilst executing your query:\n<br />MySQL Error: " . $e->getMessage() . "</p>");
return false;
}
}
# Close the connection
function close() {
$this->pdo = null;
}
}
?>
這是所有這些都可能與您的原始問題不完全相關,但也許您(或某些隨機的Google-er)可以從中獲得一些用處。
+0
感謝輸入我肯定會堅持這一點,當我開始這個過程。 – Colbyd
相關問題
- 1. 我可以將一個結構傳遞給一個函數並將其轉換爲多個參數嗎?
- 2. 我想將一個MySQL查詢轉換爲PDO?
- 3. 我可以將一個mp3文件轉換爲ANDROID文本嗎?
- 4. 將MySQL轉換爲PDO
- 5. 我可以阻止babeljs將函數轉換爲本地var嗎?
- 6. 我可以將一個變量傳遞給一個函數嗎?
- 7. C#:我可以將一個顯式委託轉換爲一個Action委託嗎?
- 8. 我可以將Clojure表單從一個包轉換爲另一個包嗎?
- 9. 豬 - 我可以將一個byteArray轉換爲一個元組
- 10. 我可以將列表範圍作爲一個函數嗎?
- 11. PL/SQL我可以將一個%TYPE變量從一個函數轉換爲DATE嗎?
- 12. 我可以將XSLT轉換爲XML嗎?
- 13. 可以將一個列表轉換爲一個整數
- 14. 如何一些MySQL的轉換爲PDO
- 15. 我可以將函數結果轉換爲python/FLASK中另一個函數的變量嗎?
- 16. 我可以在C中將0.16,0.32等轉換爲一個整數(16,32等)嗎?
- 17. 一次可以訪問一個函數!
- 18. 我錯了,或者屬性可以一次執行一個轉換器嗎?
- 19. 我可以在mysql查詢中調用一個函數嗎?
- 20. 我可以將Positive,Nat轉換爲int32,Z轉換爲int嗎?
- 21. 你可以將一個jaxb對象轉換爲org.w3c.dom.Element嗎?
- 22. 我可以將此Mysql查詢轉換爲JPA嗎?
- 23. 如何將我的一個函數轉換爲可重用函數<T>?
- 24. 如何將mysql函數轉換爲現代PDO
- 25. 我可以調用一個函數作爲參數嗎?
- 26. 我可以使用一個函數作爲參數嗎?
- 27. Scala:我可以將選項轉換爲可變參數嗎?
- 28. 函數可以將兩個值輸入另一個函數嗎?
- 29. 我可以指定一個類實例可以轉換爲某種類型嗎?
- 30. 隱藏mysql一次pdo一個腳本
這是我的下一個問題。我可以在同一個connect.php文件中創建新的連接,還是需要使用PDO連接創建一個附加的connect.php文件? – Colbyd
@Colbyd你創建連接的地方並不重要,只要它是一個PDO連接即可。 – jeroen
@Jeroen ......感謝您的迴應。 – Colbyd