一个简单的PHP MYSQLI查询非常奇怪 加载错误

一个简单的PHP MYSQLI查询非常奇怪 加载错误,php,mysql,sql,Php,Mysql,Sql,尝试使用$connect->query(“…”而不是$connect->prepare(“…”),在字符串中插入$var时,使用{}或连接以确保安全 帮助此帮助: <?php if (is_array($this->data)): ?> <?php foreach ($this->data as $key => $val): ?> <?php endforeach; ?> <?php else: ?> Error

尝试使用
$connect->query(“…”
而不是
$connect->prepare(“…”
),在字符串中插入
$var
时,使用
{}
或连接以确保安全

帮助此帮助:

<?php if (is_array($this->data)): ?>
    <?php foreach ($this->data as $key => $val): ?>
    <?php endforeach; ?>
<?php else: ?>
Error on loading
<?php 
endif; 

global $connect;
# GET DEPOSITS

$user = $_SESSION['username'];
$get_iteme2 = $connect->query("SELECT * FROM users WHERE email = '$user'");
$row = $get_iteme2->fetch_array(MYSQLI_ASSOC);
$u = $row['username'];

$get_ref = $connect->query("SELECT * FROM users WHERE refferal = '$u' ");
$row_depo = $get_ref->num_rows;

$get_itemx = $connect->query("SELECT * FROM users WHERE ref = '$u' AND balance > '0' ");
$row_depx = $get_itemx->num_rows;
$ref_c = $row_depx * 0.01;
?>
<div id="ttt" style="margin:0 auto; width:100%;  height:40px; background:#245e76; text-align:center;  overflow:hidden; border-radius:4px; margin-top:5px;">
<div id="ttt" style="margin:0 auto; width:94%;  height:48px; background:#245e76; text-align:center;  overflow:hidden; border-radius:4px; margin-top:0px;">
<p style="font-size:12px; margin-top:10px; font-family:Arial; color:white; ">Affliate Page is now under maintenance</p> 
</div></div>  </br>  

</table>

</div>
    </div>
  </div>
</div>

检查是否返回一个值

$get_ref = $connect->query("SELECT * FROM users WHERE refferal = '{$u}'");
$row_depo = $get_ref->num_rows;
如果它返回一个值,则检查此返回值

 $user = $_SESSION['username'];
如果准备语句,则需要在其产生任何结果之前执行该语句:

$get_ref = $connect->prepare("SELECT * FROM users WHERE refferal = '$u' ");
$row_depo = $get_ref->num_rows;
$get_ref = $connect->prepare("SELECT * FROM users WHERE refferal = ?");
$get_ref->bind_param("s", $u);
$get_ref->execute();
$row_depo = $get_ref->num_rows;
尽管如此,由于没有绑定任何参数,您还是可以直接使用
query()
,就像在其他查询中一样:

$get_ref = $connect->prepare("SELECT * FROM users WHERE refferal = '$u' ");
$get_ref->execute();
$row_depo = $get_ref->num_rows;
或者最好是实际使用带有绑定参数的准备语句:

$get_ref = $connect->query("SELECT * FROM users WHERE refferal = '$u' ");
$row_depo = $get_ref->num_rows;

话虽如此,你问题中的以下几行让我觉得还有别的事情发生:

如果我在查询中将变量$u更改为用户名本身,则查询将起作用

这可能意味着上一个查询(从中
$u
获取用户名的查询)没有返回任何结果:

$get_ref = $connect->prepare("SELECT * FROM users WHERE refferal = '$u' ");
$row_depo = $get_ref->num_rows;
$get_ref = $connect->prepare("SELECT * FROM users WHERE refferal = ?");
$get_ref->bind_param("s", $u);
$get_ref->execute();
$row_depo = $get_ref->num_rows;
这是您在查询中使用的
$u
。如果
$get\u iteme2
查询工作正常,但未返回任何结果,
$get\u iteme2->fetch\u array()
将返回
NULL
$row['username']
将不存在(PHP应该给您一个“未定义索引”通知,但根据您的设置,您可能看不到这一点)

如果查询确实正确执行,则必须调试其他情况:

  • $u
    是否包含任何内容,或者是否为空
  • $row
    是否包含任何内容,或者是否为空
  • $\u会话['username']
    是否包含任何内容?如果是,它是否实际包含用户名而不是电子邮件地址(您将其与
    电子邮件
    列而不是
    用户名
    列进行比较,这就是命名属性很重要的原因)

学习使用参数。不要在查询字符串中使用参数值。即使绑定参数,它也不起作用,我已经尝试过了。您应该解决这个问题,使版本具有绑定的参数。我没有看到您在
准备()
之后调用
$get\u ref->execute()
,这是您的确切代码还是您试图修复它的示例?之所以
$row\u depo
不返回行计数,是因为您当时还没有执行我第一次想到的sql语句,但这一行让我觉得还有其他原因:“如果我在查询中将变量$u更改为用户名本身,则查询将起作用“prepare不返回结果集我知道,这就是为什么如果这是他的实际代码。问题是,所有这些代码都经过调试,工作正常。。。但是它似乎没有传递到display,因为num rows显示none,但它有行……如果您
回送
查询而不是执行它,它是否包含您期望的用户名?如果然后手动执行精确的查询,会得到结果吗?