好吧,我到處去尋找答案,但不是任何真正的答案,我想這一次將是一個不錯的問那裏的人:PHP OOP用的mysqli類
我的班成員函數使用庫MySQLi的 「mysqli_query」 成員函數:
class mysqlidbconn extends mysqli {
protected $conn; //Or private $conn;
function dbconnect(){
$localHost = false;
$link = new mysqli("server","database username","password","databasename")
or ($die = true);
if ($link->connect_error){
die("Database selection failed: " . $link->connect_error);
}else{
$this->conn = $link;
}
}
,問題中的成員函數用於執行插入/更新/刪除/截斷查詢:
// To Execute Sql Query with no return result
function xQuery($sql) {
$this->conn->query($sql) or die("MySQL Query Execute Error: " .
$this->invDBConn->errorno . "<br>" . $this->conn->error . "<br>" . $sql
. "<br>");
}
在做刀片的d截斷了一個表,上面的情況與$ conn初始化爲類型爲mysqlidbconn的PRIVATE或PROTECTED成員變量完全一樣,下面的代碼使用mysqlidbconn類來舉例說明,不會生成錯誤,但也不會發生更新MySQL表:
<?php
require('path to php file containing mysqlidbconn class');
$msqli = new mysqlidbconn;
$msqli->dbconnect();
//This works
$sqlinsert = "insert into foo (foo_id, foo_field1...) values ('foo_id value',
'foo_field1 value',...);
$msqli->xQuery($sqlinsert);
//As does this
$sqltruncate = "truncate foo";
$msqli->xQuery($sqltruncate);
//But the below does not work, giving no error, result, etc.
$sqlupdate = "update foo set foo_field1='another foo_field1 value'";
$msqli->xQuery($sqlupdate);
然而,當類與$ conn變量寫爲PUBLIC,上述
$sqlupdate = "update foo set foo_field1='another foo_field1 value'";
$msqli->xQuery($sqlupdate);
成功更新表。
這是怎麼回事OOP明智地說,當我寫我的mysqlidbconn類時,我想念?
感謝您的幫助,並對任何未根據論壇規則發佈的代碼致歉。
有幾件事:1.您需要將您的MySQLi對象分配給變量以便使用它。換句話說,'$ blah = new mysqli(/ * args * /);'2.什麼是'$ die = true;'應該這樣做? ''die'你自己製作的自定義變量與'死'腳本殺死語句不同。說實話,我從來沒有見過在擴展MySQLi方面的多少意見。這已經是一堂課。您的'xQuery()'方法與您實際委派的現有'query()'方法沒有多大區別。 –
在你的1) - 固定的,在我的帖子中,我根本沒有提到$ link的初始化爲新的mysqli(...)。在你的2)$ die中,在下面的if-else語句中處理。我知道$ die!= die()。 3)是的,你是正確的,但我想在我自己的類中使用mysqli作爲成員變量,因爲還有其他幾個與mysqli相關的函數,我使用它們並不適用於所有版本的mysql,即加載xml文件是對於
user1793027
SQJ注射很多?您應該實際使用參數化查詢。如果你這樣做,不理我的評論。 – sinni800