得到了一些我正在努力的PHP代码 - 在谷歌等地搜索并尝试了所有提到的内容,但由于某些原因我无法解决它。
问题是:
我有一些代码正在查询数据库是否存在特定用户。
代码(它是类中的方法)
<?php
global $mysqli;
// Query specified database for value
$q = 'SELECT id FROM ' . $database . ' WHERE username = \'' . $username . '\'';
$r = $mysqli->query($q);
var_dump($r);
if ($r->num_rows) {
// If row found username exists so return false
return false;
}
...
?>
我把var转储了查询的结果($ r)并得到了这个:
object(mysqli_result)#4 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) }
这是正确的,上面应该只有一行。
我确实将此错误链接到if ($r->num_rows) {
注意:尝试在LINE行上的FILE中获取非对象的属性
但我不知道为什么因为该对象是有效的(如上所述)并且它应该工作正常。从我所能看出它似乎正常,我只是想知道为什么会有错误。我确信这很简单,但我会感激任何帮助。
答案 0 :(得分:13)
$sql = "SELECT * FROM table";
$result = $conn->query($sql);
if (!$result) {
trigger_error('Invalid query: ' . $conn->error);
}
使用mysqli_error()函数检查错误
可能你的查询有一些错误。
答案 1 :(得分:0)
问题的原因很简单。很多人会遇到同样的问题,因为我也这样做了,花了我一个小时才弄明白。以防万一,其他人绊倒,问题在于您的查询,您的select语句调用$dbname
而不是表名。因此找不到返回false
boolean
的内容。祝你好运。
答案 2 :(得分:-1)
我一直在努力在Drupal 7中编写自定义模块并得到同样的错误:
注意:尝试获取非对象的属性
我的代码是这样的:
function example_node_access($node, $op, $account) {
if ($node->type == 'page' && $op == 'update') {
drupal_set_message('This poll has been published, you may not make changes to it.','error');
return NODE_ACCESS_DENY;
}
}
解决方案:
我刚刚添加了条件if (is_object($sqlResult))
,一切都很顺利。
这是我的最终代码:
function mediaten_node_access($node, $op, $account) {
if (is_object($node)){
if ($node->type == 'page' && $op == 'update') {
drupal_set_message('This poll has been published, you may not make changes.','error');
return NODE_ACCESS_DENY;
}
}
}
答案 3 :(得分:-1)
我认为这不是每个人都说过的原因。您的代码中存在错误,可能会错过拼写或与数据库列名称不匹配。如果mysqli查询没有结果,那么它将返回false,因此它不是一个对象 - 这是一个错误的想法。一切正常。如果查询有结果,它返回1或0。
所以,我的建议是检查你的变量名和表列名或任何其他拼写错误。
答案 4 :(得分:-2)
我想我会稍微扩展一下。
如果执行返回0结果的MYSQLI SELECT查询,则返回FALSE。
但是,如果您收到此错误并且您已编写自己的MYSQLI查询功能,那么如果您运行的查询不是选择而是更新,则也会出现此错误。更新查询将返回TRUE或FALSE。因此,如果您只是假设任何非错误结果将返回记录,那么当您运行更新或除select之外的任何其他内容时,您将会绊倒。
最简单的解决方案是,一旦检查到它不是假的,首先要检查查询结果是否为对象。
$sqlResult = $connection->query($sql);
if (!$sqlResult)
{
...
}
else if (is_object($sqlResult))
{
$sqlRowCount = $sqlResult->num_rows;
}
else
{
$sqlRowCount = 0;
}