-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 $query 只有 $row。

与正常流程的明显偏差是我希望使用 call_user_func。并通过 $_GET 轮询 func 和 params。将更多地关注 PDO。但是, exec 之前的干净代码现在应该可以完成。这是在执行之前清理。

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

还应要求收集编号记录。例如,假设您有同一个 John Smith 的 6 条记录。您现在可以整理和扫描这些记录中的差异。要么是你想要的,不想要的,等等。或者如果你只想盲目地为 John Smith 调用这些记录的前 3 个。


mysqli_fetch_row & mysqli_fetch_row 修复:

FROM调用 $con 外部函数,然后按照 mysql 调用。mysqli 中的哪个不能按预期工作。关于 $con 的处理方式,函数没有错误。

TO仅使用添加的全局 $con 调用 $con 内部函数。即使为此,也可能最终使用 $GLOBALS。

结果:在 mysql 中调用 $con 外部函数然后 in 工作正常。在 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']);

结果:两条线都正确执行。以非严重错误执行TO做同样的事情,但没有以下非关键错误。

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


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

4

3 回答 3

0

你有几个问题。

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

  2. mysqli_fetch_row(mysqli_query($con,'...'))
    这段代码显然是直接从你的旧mysql_xx()代码转换而来的,但它不是很好。

    您忽略了由mysqli_query(). 这意味着如果失败,它将传递falsemysqli_fetch_row()函数,然后该函数将失败并返回无意义的错误expects parameter 1 to be mysqli_result,而不是实际告诉您查询中的错误是什么。

    问题是,由于我上面的第一点,$con没有设置,mysqli_query()失败了,这就是为什么你在mysqli_fetch_row().

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

希望这有助于解释这里的问题。解决了这两点,你应该就能很好地整理出整个事情了。

一旦你摆脱了这些致命错误,你还应该花时间解决你的代码容易受到 SQL 注入攻击的问题。您当前正在将$_GET变量直接传递到查询字符串中,而无需进行任何清理。这将使您的系统非常脆弱且易于破解。您应该考虑使用参数化查询,这是 mysqli 库的一项功能,旨在更轻松地以安全可靠的方式处理 SQL 查询中的变量。

于 2013-03-20T14:10:17.407 回答
0

您正在使用 call_user_func 错误阅读手册 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');
于 2013-03-20T13:41:15.140 回答
-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-使用-phps-pdo-for-database-access/

于 2013-03-20T13:39:33.400 回答