【发布时间】:2012-11-02 01:43:18
【问题描述】:
好的,我到处寻找答案,但我没有找到任何真正的答案,我认为这对于任何人来说都是一个不错的要求:
使用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>");
}
在对表进行插入和截断时,上述情况与将 $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);
成功更新表。
在编写我的 mysqlidbconn 类时我错过了 OOP 方面的情况?
感谢您的帮助,对于未根据论坛规则发布的任何代码,我深表歉意。
【问题讨论】:
-
几件事: 1. 您需要将 MySQLi 对象分配给一个变量才能使用它。换句话说,
$blah = new mysqli(/* args */);2.$die = true;应该做什么?$die你刚刚创建的自定义变量与die脚本杀戮语句不同。老实说,我从来没有看到扩展 MySQLi 有什么意义。已经是一堂课了。您的xQuery()方法与您实际委托给的现有query()方法没有明显不同。 -
关于你的 1) -- 已修复,在我的帖子中我只是没有提到 $link 初始化为新的 mysqli(...)。在你的 2) $die 在下面的 if-else 语句中处理。我知道 $die != die()。 3)是的,你是对的,但我想在我自己的类中坚持使用成员变量作为 mysqli,因为我使用的与 mysqli 相关的其他几个函数在所有版本的 mysql 中都不可用,即加载 xml 文件是
-
SQJ注射多?您实际上应该使用参数化查询。如果你这样做,请忽略我的评论。
-
@sinni800 -- 他们在进入的过程中被转义。问题强调了为什么更新查询在 $conn 受保护或私有时不更新表(没有任何错误),但在更新表时更新表$conn 是公开的。
-
@user1793027 好的,这就是我指出它作为评论的原因。但是,是的,我也发生了同样的事情。我不记得我是怎么解决的...
标签: php class properties mysqli