用简单的PHP MYSQLI QUERY非常奇怪的情况

时间:2017-11-18 15:00:05

标签: php mysql sql

<?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>

这是我的代码,奇怪的是$row_depo没有提供num行,但是如果我在查询中将变量$u更改为用户名本身,则查询有效,但查询正在读取变量$u并使用用户名本身,如果它使用变量

它就不起作用

3 个答案:

答案 0 :(得分:0)

尝试使用$connect->query("...")代替$connect->prepare("..."),当您在字符串中插入$var时使用{}或连接以获得安全性。

帮助提供帮助:

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

答案 1 :(得分:0)

检查是否返回值

 $user = $_SESSION['username'];

如果它返回一个值,则检查此返回值

$u = $row['username'];

答案 2 :(得分:0)

$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 = '$u' ");
$get_ref->execute();
$row_depo = $get_ref->num_rows;

虽然,由于您没有绑定任何参数,您也可以直接使用query(),就像在其他查询中一样:

$get_ref = $connect->query("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更改为用户名本身,则查询可以正常工作

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

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

这是您在查询中使用的$u。如果$get_iteme2查询正常运行但未返回任何结果,则$get_iteme2->fetch_array()将返回NULL并且$row['username']将不存在(并且PHP应该为您提供&#34; undefined索引&#34;通知,但根据您的设置,您可能看不到这个。)

如果查询确实正确执行,您必须调试其他内容:

  • $u是否包含任何内容,或者它是否为空?
  • $row是否包含任何内容,或者它是否为空?
  • $_SESSION['username']是否包含任何内容,如果是,它是否实际包含用户名而不是电子邮件地址(您将其与email列而不是username列,这就是为什么命名属性很重要?)