我有个很奇怪的问题。我正在尝试从WoW军火库导入数据,并在此过程中将此信息添加到我自己的数据库中的一个名为user的表下。
现在,我在添加新成员的同时检查当前成员的所有信息是否仍然正确(请记住,我将在此之后修复所有sql注入问题):
@$json = file_get_contents("http://$region.battle.net/api/wow/guild/$realm/$guild?fields=members,achievements");
if($json == false)
{
throw new Exception("Failed To load infomation. check setup options");
}
$decode = json_decode($json, true);
foreach($decode['members'] as $p) {
$mrank = $p['rank'];
$mname = $p['character']['name'];
$mclass = $p['character']['class'];
$mrace = $p['character']['race'];
$mlevel = $p['character']['level'];
$mgender = $p['character']['gender'];
$check = mysql_query("SELECT * FROM user WHERE charactername='$mname'");
if($check == false)
{
die("Sql query failed");
}
if(mysql_num_rows($check) != 0)
{
if($mlevel !== $check['level'])
{
mysql_query("UPDATE user SET level='$mlevel' WHERE charactername='$mname'");
$uCount = $uCount + 1;
echo "level $mname<br />";
}
if($mclass !== $check['class'])
{
mysql_query("UPDATE user SET class='$mclass' WHERE charactername='$mname'");
$uCount = $uCount + 1;
echo "class $mname<br />";
}
if($mrace !== $check['race'])
{
mysql_query("UPDATE user SET race='$mrace' WHERE charactername='$mname'");
$uCount = $uCount + 1;
echo "race $mname<br />";
}
if($mgender !== $check['gender'])
{
mysql_query("UPDATE user SET gender='$mgender' WHERE charactername='$mname'");
$uCount = $uCount + 1;
echo "gender $mname<br />";
}
if($mrank !== $check['rank'])
{
mysql_query("UPDATE user SET rank='$mrank' WHERE charactername='$mname'");
$uCount = $uCount + 1;
echo "rank $mname<br />";
}
$pCount = $pCount + 1;
}
else
{
//add new user otherwise
$sql="INSERT INTO user (charactername, class, race, level, gender, rank) VALUES ('$mname','$mclass','$mrace','$mlevel','$mgender','$mrank')";
$nCount = $nCount + 1;
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
}
}
echo "$nCount new members added.<br />";
echo "$pCount member(s) already existed.<br />";
echo "$uCount member(s) got updated <br />";但现在的问题是,使用此代码的更新部分,所以所有的:
if($mlevel !== $check['level'])
{
mysql_query("UPDATE user SET level='$mlevel' WHERE charactername='$mname'");
$uCount = $uCount + 1;
echo "level $mname<br />";
}不管怎么说,我不明白为什么。我比较了两个数据,当回声时两者是相等的。因此,据我所知,使用!==应该只在它们不相同的情况下触发。在当前情况下,我让update脚本运行了800次。这样一来,user表中的所有数据也会更新800次。而据我所知,这不应该是必要的。
任何帮助都将不胜感激。
发布于 2012-08-02 12:03:27
您应该尝试!= php as !==检查它们是否具有完全相同的值和数据类型,并且由于检索两者的方式不同,php可能会为它们分配不同的数据类型
或者,您可以将$a =(int)$mlevel和$b =(Int)$check‘’level‘转换,然后执行!==
发布于 2012-08-02 13:25:33
虽然这可能不是最好的方法,但在找到@MatthewBlancarte的查询结果为Null后,我决定修改代码:
foreach($decode['members'] as $p) {
$mrank = $p['rank'];
$mname = $p['character']['name'];
$mclass = $p['character']['class'];
$mrace = $p['character']['race'];
$mlevel = $p['character']['level'];
$mgender = $p['character']['gender'];
$check = mysql_query("SELECT * FROM user WHERE charactername='$mname'");
while($row = mysql_fetch_array($check)){
$prank = $row['rank'];
$pname = $row['charactername'];
$pclass = $row['class'];
$prace = $row['race'];
$plevel = $row['level'];
$pgender = $row['gender'];
}
if($check == false)
{
die("Sql query failed");
}
if(mysql_num_rows($check) != 0)
{
if($mlevel != $plevel)
{
mysql_query("UPDATE user SET level='$mlevel' WHERE charactername='$mname'");
$uCount = $uCount + 1;
//echo "level $mname<br />";
}使用mysql_fetch_array添加额外的查询while循环:
while($row = mysql_fetch_array($check)){
$prank = $row['rank'];
$pname = $row['charactername'];
$pclass = $row['class'];
$prace = $row['race'];
$plevel = $row['level'];
$pgender = $row['gender'];是修复它的方法,将其与这些变量进行比较。谢谢大家的帮助。在更多的人评论之前是的..我将修复sql注入..>.>
https://stackoverflow.com/questions/11770826
复制相似问题