首页 文章

使用mysqli_query和mysqli_fetch_row将mysql转换为mysqli错误的问题

提问于
浏览
-2

这是编辑过的脚本没有错误 . 并且应用了2个修复程序 . 对于那些部分帮助的人,谢谢 . 提到代码不清楚或杂乱是无关紧要的 . 鉴于以下大多数是mysql查询中的常见结构 . 甚至mysql的示例文档也遵循这个类似的流程 . 回复的成员应该否定毫无意义的互联网戏..它更值得你的时间,而我自己也是如此 . 那些留下话题和协助的人,谢谢你 .

例如:

$ row = mysqli_fetch_row(mysqli_query($ con,“SELECT test_table.points FROM test_table WHERE test_table.key ='” . $ key . “'”)); if($ row [0]> 0){//存在

如果为$,则$ row将返回非零结果 . 否则0表示假 . 几乎没有必要检查mysqli_fetch_row和/或mysqli_query . 因为在简单中检查$ row工作正常 . 在一般存在条件下单独检查mysqli_fetch_row和/或mysqli_query是不必要的 . 它确实提供了存在/不存在的结果 . 没有$ result $ row $查询只是$ row .

注意到与正常流程的偏差是我想要使用call_user_func . 并通过$ _GET在func和params中进行轮询 . 将更多关注PDO . 但是,exec之前的干净代码现在应该做得很好 . 这是在exec之前清理 .

总而言之,代码可以正常工作 . 并且已经写了更多来管理mysql数据库 . 从写入,写入块,读取,读取块,删除,删除块 .

还可根据要求收集编号记录 . 例如,假设你有同样约翰史密斯的6条记录 . 您现在可以整理并扫描这些记录中的差异 . 无论是你想要什么,不想要的等等 . 或者如果说你只是想盲目地为John Smith打这些记录中的前三个 .


mysqli_fetch_row和mysqli_fetch_row修复:

FROM 根据mysql调用$ con outside函数 . 在mysqli中哪个不能按预期工作 . 关于$ con的处理方式,函数没有错误 .

TO 仅使用添加的全局$ con调用$ con内部函数 . 甚至为此可能最终使用$ GLOBALS .

结果:调用$ con outside函数然后在mysql中正常工作 . 在mysqli中,它需要在函数内设置全局 . 即全球$ con . 或者它失败了 .



call_user_func非严重错误修复:

FROM call_user_func($ func($ _ GET ['user'],$ _ GET ['key'],$ _ GET ['points'],$ _ GET ['type']));

TO call_user_func($ func,$ _ GET ['user'],$ _ GET ['key'],$ _ GET ['points'],$ _ GET ['type']);

结果:两行都正确执行 . From 以非严重错误执行 . TO 做同样的事情,但没有跟随非严重错误 .

两者的示例输出:user = MY_Name; key = 34342 $ ee56i1; points = 1234; type =


  • 删除代码作为修复解决了问题 -

3 回答

  • 0

    你正在使用call_user_func错误读取manutal call_user_func第一个参数是回调 - 在你的情况下它是你的类中的一个函数所以它应该是这样的:如果你在一个对象中有一个非静态函数:

    class Test{
        public  function doit($a){
            echo($a);
        }
    }
    
    $t = new Test();
    
    call_user_func(array($t,'doit'),'asfaasfs');
    

    并在对象内的静态函数中:

    class Test{
        public static function doit($a){
            echo($a);
        }
    }    
    
    call_user_func('Test::doit','asfaasfs');
    
  • 0

    你有一些问题 .

    • $con 在类外声明,因此在类中不可用 . 您需要将它传递给类(更好的选项),或将其指定为全局(快速脏选项) .

    • mysqli_fetch_row(mysqli_query($con,'...'))
      显然,这段代码直接来自旧的 mysql_xx() 代码,但它并不好 .

    您忽略了 mysqli_query() 返回的任何可能的错误情况 . 这意味着如果它失败了,它会将 false 传递给 mysqli_fetch_row() 函数,然后该函数将失败并出现无意义的错误 expects parameter 1 to be mysqli_result ,而不是实际告诉您查询中的错误 .

    问题是,由于我上面的第一点,未设置 $conmysqli_query() 失败,这就是为什么你在 mysqli_fetch_row() 中收到错误的原因 .

    理想情况下,您应该将此代码拆分为多行 . 单独调用 mysqli_query() ,然后进行一些错误检查,然后只有在知道查询确实有效后再调用 mysqli_fetch_row() .

    希望这有助于解释这里存在的问题 . 解决这两点,你应该很好地整理整个事情 .

    一旦've got rid of those fatal errors, you should also take time to work on the problem that your code is vulnerable to SQL injection attacks. You'当前将 $_GET 变量直接传递给查询字符串而没有任何消毒 . 这将使您的系统非常脆弱且易于破解 . 您应该考虑使用参数化查询,这是mysqli库的一个功能,旨在使其更安全,更安全地处理SQL查询中的变量 .

  • -1

    你的课程目前毫无意义,或许坚持编写命令式样式代码,因为它至少会更清晰 .

    此时,您应该将$ con传递给MYsql类以将其自身用作资源,而不是尝试将其作为全局变量访问 .

    你的不是过滤用户的输入,这很危险,可能会导致您的网站上的SQL注入攻击 .

    我鼓励你阅读这两篇文章,一旦你了解它们,我也鼓励你简单地转而使用PDO和准备好的语句 . 这将阻止您的代码当前允许的SQL注入攻击 .

    http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/ http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

相关问题