2013-03-20 94 views
-2

这里是编辑后的脚本没有错误。并修复了2个修复程序。对于那些帮助过的人,谢谢。提到代码不清楚或混乱是无关紧要的。鉴于以下大多数是mysql查询中的常见结构。即使mysql的示例文档也遵循这种类似的流程。回复的成员应该从无意义的互联网嘲笑中否定。它更值得你花时间,我自己也这样做。那些谁留在话题和协助,我感谢你。使用mysqli_query&mysqli_fetch_row将mysql转换为mysqli错误的问题

例如:

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

其中$ row将返回非零结果(如果为true)。否则为0。几乎不需要检查mysqli_fetch_row和/或mysqli_query。由于在简单中检查$行工作正常。在普遍存在的条件下,不需要单独检查mysqli_fetch_row和/或mysqli_query。它确实提供了存在/不存在的结果。没有$ result $ row $ query只是$ row。

对正常流程的注意偏差是我希望使用call_user_func。并通过$ _GET进行功能和参数调查。将更多地关注PDO。但是,exec之前的干净代码现在应该可以做好了。执行前要清理哪些内容。

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

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


mysqli_fetch_row & mysqli_fetch_row修复:

FROM调用$ CON之外的功能,然后到按MySQL的。在mysqli中没有按预期工作。关于$ con的处理方式,函数没有错误。

TO只需添加全局$ con即可调用$ con函数。可能最终会使用$ GLOBALS,即使如此。

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



call_user_func非关键错误修正:

FROM call_user_func($ FUNC($ _ GET [ '用户'],$ _ GET [ '键'],$ _ GET [”点 '],$ _ GET [' 类型'])); call_user_func($ func,$ _ GET ['user'],$ _ GET ['key'],$ _ GET ['points'],$ _ GET ['type']);}};

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

两个

样本输出:用户= MY_NAME;关键= 34342 $ ee56i1;点= 1234;类型=


- 为移除修复代码解决了问题 -

回答

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

+0

类只是毫无意义,因为你只能看到它的一部分。不要根据分割来判断它的有效性。坚持显示什么。另一个PHP我有处理错误检查,过滤等。然而,我会看PDO。 – Esoterica 2013-03-20 22:29:33

+1

@Dan如果你没有显示完整的,自给自足的代码(如果没有,明显地将它标记为这样!),那么不要责怪我观察这些!我不是一个总是知道何时向我展示完整解决方案的向导!我只能对所显示的内容发表评论。 – Ivo 2013-03-21 00:14:12

0

您使用call_user_func错读manutal call_user_func第一个参数是回调 - 在你的情况下,它是你的类中的功能,所以它应该是这样的: 如果你有一个非在对象-static功能:

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

改为:call_user_func($ func,$ _ GET ['user'],$ _ GET ['key'],$ _ GET ['points'],$ _ GET ['type']);它通过$ _GET语句将所有4个需求传递给$ func。我所需要做的就是改变(去掉一个)。固定和引用,没有错误。最初的代码仍然执行,但轻声抱怨。做这个改变仍然有效,但没有抱怨。所以这在一定程度上有所帮助。这只是因为缺乏参考而抱怨。不是因为它完全错误。只是以PHP想要的方式未被引用。 – Esoterica 2013-03-20 21:35:19

+0

尽管call_user_func并不完全正确。它仍然执行没有打破。并且总是返回结果。我所做的更改仍然是一样的,但没有显示任何更多的非关键性错误。我希望你会得到帮助的错误会是为什么$ row在mysqli中严重错误,但从未在mysql中执行过。而且它错误地声明它希望mysqli_result。以及如何将它传递到$行以满足其需要。 – Esoterica 2013-03-20 21:41:13

+0

部分原因在于为什么$ row严重错误。 $ con在外部函数中注意到mysql从未失败。要在mysqli中有一个函数以外的$ con,它需要将它注意为全局的。否则$ con必须在调用函数内部使用。 – Esoterica 2013-03-20 22:19:17

0

你有几个问题。

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

  2. 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()

希望能帮助解释这里出现的问题。解决这两点,你应该很好地把整个事情整理出来。

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

+0

1.取出这段代码并删除类结构。然后在call_user_func中。将MYsql :: $ func更改为$ func。错误不存在类结构。上传前我忘记删除它。对不起。 2. mysqli_query和mysqli_fetch_row之前也被拉长了。然后再次检查他们是否仍然需要mysqli_result。请参阅[链接](http:// stackoverflow。com/questions/7707949/get-as-parameters-in-php-)并查看最佳答案 - call_user_func。 – Esoterica 2013-03-20 20:53:24

+0

$ sql =“SELECT test_table.points FROM test_table WHERE test_table.key ='”。 $键。 “'”; $ query = mysqli_query($ con,$ sql); $ row = mysqli_fetch_row($ query); 显示它仍然需要mysqli_result。还没有想出如何处理。在MySQL中,我从来不需要提交任何比我更多的东西。在mysqli它需要它。 – Esoterica 2013-03-20 21:01:08

+0

将$ con放入写入函数中进行测试,并将其关闭。现在的代码就像在mysql中一样。奇怪的是,mysql从未抱怨$ con在函数之外,然后被调用。该错误现在与mysqli_fetch_row或mysqli_query()无关。它一直都是美元。所以现在会寻找方法来保持$ con如何拥有它。功能之外。并称之为全球化。奇怪地看着你写的和我玩的东西都有帮助。那谢谢啦。你能否建议将$ con称为全局的好方法?现在在我的脚本中。 – Esoterica 2013-03-20 22:13:32