Php Mysql查询成功,但未更新
我正在为一个朋友开发一个RPG类型的战斗系统,在使用mysql查询时遇到了令人沮丧的问题。另外,请不要讲授mysql_uu函数的语义Php Mysql查询成功,但未更新,php,mysql-error-1064,Php,Mysql Error 1064,我正在为一个朋友开发一个RPG类型的战斗系统,在使用mysql查询时遇到了令人沮丧的问题。另外,请不要讲授mysql_uu函数的语义 $sql = "UPDATE `user_pets` SET `curhp` = `hitpoints`, `curmp` = `misticpower`, `pet_status` = '0' WHERE `id` = '" .$arrayPet['id']. "'"; if ( mysql_query($sql) { echo "Success"; }
$sql = "UPDATE `user_pets` SET `curhp` = `hitpoints`, `curmp` = `misticpower`, `pet_status` = '0' WHERE `id` = '" .$arrayPet['id']. "'";
if ( mysql_query($sql) {
echo "Success";
}
在应用程序中,每次都是成功的。但是,数据库中实际上没有发生任何事情。我已经回显了查询本身,并在phpmyadmin中运行了它,“修复”已正确完成。然而,当这个查询执行时,不管实际发生了什么,它都不是我们想要的
有没有关于疑难解答的建议,或者您是否发现查询本身有什么问题
$arrayPet['id']取自
user\u pets
表,是一个有效的id。我建议的第一件事是不要将$arrayPet['id']
用单引号括起来。。。我假设它是一个整数
第二,如果函数mysql_query()成功返回,则不一定意味着任何内容都已更新。这只意味着查询在服务器上成功执行。您的查询看起来只需设置一些字符串并将pet_状态设置为0。请提供:
$sql = "UPDATE user_pets SET curhp = 'hitpoints', curmp = 'misticpower', pet_status = '0' WHERE id = '" .$arrayPet['id']. "'";
$result = mysql_query($sql);
if ($result) {
echo "Success";
}
更重要的是,检查$arrayPet['id']:它是否返回整数或字符串值?如果是整数类型,则不要将其放在单引号内。就这样做吧:
... WHERE id = $arrayPet['id']";
应该告诉您一行是否确实受您的查询影响。不鼓励使用
mysql.*
函数。你应该使用PDO
或mysqli
@Mike,这对找到我的问题的解决方案没有帮助,我甚至要求人们不要提出这个问题。@DarkXphenomenon我在查询后立即将其添加到脚本中,结果显示一行受到影响,但预期的更改没有发生。作为评论,我在下面发布了一个应该发生什么的示例。您是否按照@osg的建议将您的“around”值更改为“
?尝试一下,它表示查询成功。我甚至在后面添加了mysql_impacted_rows(),它返回时说它确实影响了一行。但是,在请求行的数据库中没有进行任何更改。例如:在一场战斗之后,用户没有最大的生命值。假设他的健康状况是50分之25,而misticpower是30分之15。此查询应将这些值返回到最大可能值(数据库中的hitpoints和misticpower)。但是,两者都没有。您确定它正在查询同一个数据库吗?肯定。在这一个的两边还有另外两个mysql_query(),它们都会影响正确的数据库。例如:在一场战斗之后,用户没有最大的健康。假设他的健康状况是50分之25,而misticpower是30分之15。此查询应将这些值返回到最大可能值(数据库中的hitpoints和misticpower)。但是,两者都没有。@Eric是生命值
是一个用数字替换的变量吗?如果不是,则看起来您试图将字符串更新为整数列(假设curhp、curmp为整数)。这可能无法更新。hitpoints是表中的一个字段,是一个不变的整数。curhp是一个整数字段,用于存储当前的生命值(在受到攻击后等)。我告诉它将curhp设置为生命值(完全治疗)。我尝试过指定要将curhp设置为的值,而不是使用列名,但这也不起作用。