php
  • mysqli
  • 2016-11-19 64 views 0 likes 
    0

    有人可以帮助弄清楚为什么这个查询不会从我的数据库中检索某个记录?PHP和Mysqli不检索某个记录

    $db = new mysqli(DB_HOSTNAME,DB_USERNAME,DB_PASSWORD,DB_DATABASE); 
    $query1 = $db->query("SELECT * FROM `customer` WHERE `wmmw_domain` = '" . array_shift((explode(".",$_SERVER['HTTP_HOST']))) . "'"); 
         while($r = $query1->fetch_array()){ 
    
           $aff_id = $r['wmmw_id']; 
        } 
    echo $aff_id; 
    

    这是链接的测试脚本: http://evecournoyer.wm-mw.org/testindex.php

    如果更改一个字母,或加上一个字母,以数据库记录 (如evecournoyer1,或vecournoyer),它的工作原理。

    是否有名称evecournoyer阻止 查询运行?这很奇怪....

    这里是一个工程: http://brucetherrien.wm-mw.org/testindex.php

    注:我可以检索使用Perl从命令shell的记录,如果它很重要。

    +0

    尝试在表名和列名周围添加反引号。这可能无法解决您的问题,但它会防止mysql保留字错误。 – SuperDJ

    +0

    添加反引号,但仍然没有工作.... :( – musicweb

    +0

    你说什么没有意义...此外,我试图呼应'array_shift((explode(“。”,$ _ SERVER ['HTTP_HOST' ])))'它会导致一个警告,如果你将这个代码改成'explode(“。”,$ _SERVER ['HTTP_HOST'])[0]'?会产生相同的输出。域) – 2016-11-19 14:06:12

    回答

    0

    尝试使用prepare()binding params和结果。 希望是这样的:

    $link = mysqli_connect('localhost', 'my_user', 'my_password', 'world'); 
    
    $stmt = mysqli_prepare($link, 'select name, id from mytable where myfield=?'); 
    mysqli_stmt_bind_param($stmt, 's', $myValue); 
    
    $myValue = getSessionHttpHost(); 
    
    /* bind result variables must match */ 
    $stmt->bind_result($name, $id); 
    
    /* fetch values */ 
    while ($stmt->fetch()) { 
        printf ("%s (%s)\n", $name, $id); 
    } 
    
    /* close statement and connection */ 
    mysqli_stmt_close($stmt); 
    
    ...... 
    

    我会检查数据类型,编码和长度的问题的字段。

    我认为你得到了其他域的结果,所以你的http_host语句正在工作。

    从子域添加或删除字符使其工作没有意义。如果数据类型长度超过了,并且存储的值被截断了,那么我预计它会失败选择条件,但是您正在添加它并且它可以工作。

    我看不到任何应该失败的子域。如上所示,查看查询字符串可能会在where条件中显示异常。如果通过命令提示符或客户端使用该域的http_host代码的结果手动运行,查询是否会失败?

    +1

    他们使用'mysqli_' API连接并且你建议他们使用'mysql_real_escape_string()';你不能混合不同的MySQL API,另外,准备好的语句比'real_escape_string()'更好。 –

    +0

    Ops错过了msqli。 –

    +0

    由于没有处理传入的http_host内容,我仍然会推荐使用alternatve,如Fred -ii-,prepare()和bind_param()所示,以清除您在查询中接收和使用的内容,并保存到数据库中。 –

    相关问题