Php 如何使用mysqli对象从SQL查询输出多行
假设mysqli对象已经用全局变量$mysql实例化(并连接),下面是我尝试使用的代码Php 如何使用mysqli对象从SQL查询输出多行,php,mysql,oop,loops,mysqli,Php,Mysql,Oop,Loops,Mysqli,假设mysqli对象已经用全局变量$mysql实例化(并连接),下面是我尝试使用的代码 class Listing { private $mysql; function getListingInfo($l_id = "", $category = "", $subcategory = "", $username = "", $status = "active") { $condition = "`status` = '$status'"; if (!empty($
class Listing {
private $mysql;
function getListingInfo($l_id = "", $category = "", $subcategory = "", $username = "", $status = "active") {
$condition = "`status` = '$status'";
if (!empty($l_id)) $condition .= "AND `L_ID` = '$l_id'";
if (!empty($category)) $condition .= "AND `category` = '$category'";
if (!empty($subcategory)) $condition .= "AND `subcategory` = '$subcategory'";
if (!empty($username)) $condition .= "AND `username` = '$username'";
$result = $this->mysql->query("SELECT * FROM listing WHERE $condition") or die('Error fetching values');
$this->listing = $result->fetch_array() or die('could not create object');
foreach ($this->listing as $key => $value) :
$info[$key] = stripslashes(html_entity_decode($value));
endforeach;
return $info;
}
}
db中有几百个列表,当我调用$result->fetch_array()时,它会将db中的第一行放在数组中。
然而,当我试图调用该对象时,我似乎只能访问第一行。
例如:
$listing_row=新上市;
而($listing=$listing\u row->getListingInfo()){
echo$listing[0];
}
这将输出数据库中同一行的无限循环。为什么不前进到下一排?
如果我移动代码:
$this->listing = $result->fetch_array() or die('could not create object');
foreach ($this->listing as $key => $value) :
$info[$key] = stripslashes(html_entity_decode($value));
endforeach;
如果我把它移到类之外,它的工作原理与预期完全一样,一次输出一行,同时循环执行while语句。
有没有一种方法可以编写它,这样我就可以在类中保留fetch_array()调用,并且仍然循环记录?您的对象从根本上说是有缺陷的-每次调用getListingInfo()方法时,它都在运行查询。另外,
mysql\u fetch\u array()
不会获取整个结果集,它只获取下一行,因此您的方法归结为:
作为补充说明,stripslashes的使用让我想知道您的PHP安装是否启用了magic_quotes_gpc。这个功能早就被弃用了,每当v6.0发布时,它就会从PHP中删除。如果您的代码在这样的安装中按原样运行,则可能会在数据中丢弃合法转义。同样,在数据库中存储编码/转义数据通常是一个糟糕的主意。数据库应包含数据的“原始”副本,然后在需要处理版本时根据需要对其进行处理(转义、引用等)。@mark:谢谢您的解释。我对OOP很陌生。我确实有一个关于安全的问题作为后续。我没有启用magic_quotes_gpc,但在将表单添加到数据库之前,我一直在对通过表单发送的所有内容使用addslashes()。有没有更好的方法来保护数据?我还应该如何过滤某人通过表单输入发送的数据,以便安全地将其输入数据库?编写“安全”查询的最佳方法是使用PDO()和准备好的语句。这些将处理引用/转义数据的所有繁重工作。否则,最好使用mysql\u real\u escape\u string()而不是addslashes()。mysql函数使用mysql自己的引用机制。addslashes基本上只是一个哑字符串替换函数,可能被unicode/非常规字符愚弄。