0

为什么这个查询不起作用?!?

错误

解析错误:语法错误,第 5 行 E:\xampp\htdocs\pf\shop\buy.php 中的意外 T_STRING

变量的示例信息

$character->islots = 20

$chatacter->name = [RE] Tizzle

$e2 = 10

功能

function increaseSlots($e2) {
    $slots = ($character->islots)+($e2);
    mysql_query('UPDATE `phaos_characters` SET `inventory_slots`="'.$slots.'" WHERE `name`="'.$character->name.'"'); // <-- Line 5
    if (mysql_affected_rows() != 0) {
        echo 'Inventory Size Incresed By '.$e2.' Slots';
    }else{
        echo mysql_error();
    }
}
4

4 回答 4

3

查看文档: http: //php.net/manual/en/function.mysql-num-rows.php

从结果集中检索行数。此命令仅对返回实际结果集的 SELECT 或 SHOW 等语句有效。要检索受 INSERT、UPDATE、REPLACE 或 DELETE 查询影响的行数,请使用 mysql_affected_rows()。

您需要使用mysql_affected_rows()或更好,PDO 或 mysqli。

于 2012-09-18T20:20:36.077 回答
2
$slots = ($character->islots)+($e2);

好像有错别字。尝试:

$slots = ($character->slots)+($e2);
于 2012-09-18T20:20:54.400 回答
1

首先,您应该知道 mysql_num_rows 仅返回 SELECT 或 SHOW 语句的有效结果,如PHP 文档中所述。您可以使用mysql_affected_rows()来满足您的特定需求。

但是,旧的 PHP MySQL API(您正在使用)正在逐步淘汰,因此我建议您使用 mysqli 或 PDO 来满足您的数据库连接需求。

但是,在满足您的要求的同时,您可以尝试使用以下语法来确保您收到 MySQL 错误(如果它抛出一个错误)。您的 PHP 脚本将停止,但您会看到错误。

$query = sprintf('UPDATE `phaos_characters` SET `inventory_slots`=%d WHERE `name`="%s"',$slots,$character->name)
$result = mysql_query($query) or die(mysql_error());

最后的想法是,在这种情况下,它有助于打印出您的结果$query并通过 phpMyAdmin 之类的工具手动运行它以查看会发生什么。

于 2012-09-18T20:41:27.590 回答
0

Bleh...我暂时找到了一种更好的方法..抱歉浪费了你们的时间...

在处理函数之前,我只是将 $character 对象放入变量中。

function increaseSlots($e2,$charname,$charslots) {
    $slots = $charslots+$e2;
    mysql_query('UPDATE `phaos_characters` SET `inventory_slots`="'.$slots.'" WHERE `name`="'.$charname.'"');
        if (mysql_affected_rows() != 0) {
            echo 'Inventory Size Incresed By '.$e2.' Slots';
        }
}
于 2012-09-18T20:49:37.467 回答