SmartFAQ 由智造工厂(https://www.smartfactory.ca)开发,智造工厂是InBox Solutions(https://www.inboxsolutions.net)的一个部门。

我该如何查询数据库?
当访问数据库时,XOOPS提供了数据库抽象层供您使用。

可以通过两种方式获取数据库对象
a) 使用 $xoopsDB 实例 - 如果你在一个函数或类方法中,你需要首先使用以下方式声明它为全局变量
global $xoopsDB;

b) 调用数据库类上的静态 getInstance() 方法
$xoopsDB =& XoopsDatabaseFactory::getDatabaseConnection();


完成这些操作后,您可以使用数据库对象来查询数据库
//任意语句可放入查询中 - SELECT, UPDATE, INSERT等.
$result $xoopsDB->query('SELECT * FROM [...] ');
//如果是SELECT语句,$result将现在是一个结果集,因此让我们遍历它
while ($row $xoopsDB->fetchArray($result)) {
    
$variable $row['index'];
    
$another_variable $row['another_index'];
}

如果不是SELECT语句,$result将为真或假,这取决于SQL查询是否遇到了错误。

请参阅此处的问答


评论版权归属作者。我们不负责内容。
user

 我的数据库查询列表


以下是访问XOOPS数据库的一些数据库查询。

// To delete rom from table
$query "Delete from ".$xoopsDB->prefix("xoops_table")." where id='$id'";

// To insert a row into the table
$sql "INSERT INTO ".$xoopsDB->prefix('xoops_table');
$sql .= " ( xuser, emailname ) VALUES ";
$sql .= " ( '$user', '$userwebname' )";
if ( ! 
$xoopsDB->query($sql) )
{
echo( 
$xoopsDB->error." : ".$xoopsDB->errno );


//To update a row
$query "Update ".$xoopsDB->prefix("xoops_table")." smtpuname = '$smtpuname', smtppasswd = '$smtppasswd' where id='$id' ";

//Select from row
$query 'SELECT field1, field2 FROM ' $xoopsDB->prefix('tablename') . ' WHERE searchfield1 =1';

//Query database
$query "select * FROM ".$xoopsDB->prefix("xoops_table")." where uid = $userid";
$results=$xoopsDB->query($query,$options[0],0);

//Compare 2 groups through a user uid. 1 user stored in db, other is current. I have to thank Mithrandir for giving me this code.
$db_uid $row['uid'];
$userid $xoopsUser->uid();
if (
$userid != $db_uid) {
$member_handler =& xoops_gethandler('member');
$db_groups $member_handler->getGroupsByUser($db_uid);
$current_groups $xoopsUser->getGroups();
$common_groups array_intersect($current_groups$db_groups);
}
if (
$userid==$db_uid || !empty($common_groups)){
//do something
}

 
user

 $xoopsDB->queryF($sql)


我尝试使用:$xoopsDB->query($sql)向数据库插入值但失败了。但我发现:$xoopsDB->queryF($sql)可以使用。

这个问题曾经在某些论坛上谈论过。

 
user

 Re: $xoopsDB->queryF($sql)


@sinus

你应该始终使用$xoopsDB->query($sql),因为它更安全。

如果你这样做不奏效,你可能在哪出了错。

使用queryF()不安全,因为它无法区分_POST和_GET,可能导致通过XSS或CSRF进行安全利用。

queryF()直接处理,绕过http referer检查,我认为跳过了文本净化函数...

使用query()应该适用于select语句,如果不是通过select语句执行,那么这个方法必须通过$_POST方法完成...使用$_GET方法与query()不兼容,如果http referer被阻止,这将不起作用。

希望这能多少有所帮助。

 
user

 更新不工作,请帮助


//全局变量$xoopsDB;
//$xoopsDB = & Database::getInstance();

$noavatar="noavatar.gif";
$query = "UPDATE ".$xoopsDB->prefix("users")." SET user_avatar ='$noavatar'";
$res=$xoopsDB->query($query);
echo $res;
如果 (!$res) {
//$xoopsTpl->assign('msg', "错误:$query");
echo "错误";
} else {
//$xoopsTpl->assign('msg', "数据已正确插入到数据库中!");
echo "成功";
}


告诉我这里有什么错误,它总是显示错误,从未成功

 


Login

Who's Online

270 user(s) are online (21 user(s) are browsing XOOPS FAQ)


Members: 0


Guests: 270


more...

Donat-O-Meter

Stats
Goal: $100.00
Due Date: Aug 31
Gross Amount: $0.00
Net Balance: $0.00
Left to go: $100.00
Make donations with PayPal!

Did you know ?

Fantastico installer can install an older version of xoops?

Random question

How do I ban a user?