这是编辑过的脚本没有错误 . 并且应用了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 回答
你正在使用call_user_func错误读取manutal call_user_func第一个参数是回调 - 在你的情况下它是你的类中的一个函数所以它应该是这样的:如果你在一个对象中有一个非静态函数:
并在对象内的静态函数中:
你有一些问题 .
$con
在类外声明,因此在类中不可用 . 您需要将它传递给类(更好的选项),或将其指定为全局(快速脏选项) .mysqli_fetch_row(mysqli_query($con,'...'))
显然,这段代码直接来自旧的
mysql_xx()
代码,但它并不好 .您忽略了
mysqli_query()
返回的任何可能的错误情况 . 这意味着如果它失败了,它会将false
传递给mysqli_fetch_row()
函数,然后该函数将失败并出现无意义的错误expects parameter 1 to be mysqli_result
,而不是实际告诉您查询中的错误 .问题是,由于我上面的第一点,未设置
$con
,mysqli_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查询中的变量 .你的课程目前毫无意义,或许坚持编写命令式样式代码,因为它至少会更清晰 .
此时,您应该将$ 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/