首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP MySQL查询问题

PHP MySQL查询问题
EN

Stack Overflow用户
提问于 2011-06-04 01:24:38
回答 4查看 282关注 0票数 1
代码语言:javascript
复制
$dblocation = "localhost";
$dbname = "xx";
$dbuser = "xx";
$dbpasswd = "xx";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
mysql_select_db($dbname, $dbcnx);
mysql_query("SET NAMES utf8");
mysql_query("SET COLLATION_CONNECTION=utf8_bin"); 
$num = mysql_query("select no from votes WHERE id='".$id."';");
$num2 = $num + 1;
$num3 = mysql_real_escape_string($num2);
mysql_query("UPDATE votes SET no='".$num3."' WHERE id=".$id.";");

这是php代码。我想让它:

1)从"votes“表中"id”(INT)等于$id的行中获取"no“值(INT)

2)将该值递增1

3)将"votes“表的新值写入"id”(整数)等于$id的行

但不知何故,我的代码不能正常工作。有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-04 01:32:32

对于初学者来说,应该去掉函数调用前面的@符号。这将抑制由给定语句引起的错误-并让您想知道哪里出了问题。当你在开发的时候,你想要你能得到的关于你的代码的所有信息,尤其是错误。因此,删除@ (错误抑制运算符)是第一步。

其次,无论何时查询数据库,都有两个步骤。首先调用mysql_query。然后,在确保mysql_query返回任何内容之后,对查询对象调用一个fetch类型的语句。查看mysql_query的文档:http://php.net/manual/en/function.mysql-query.php有一个很好、很简单的例子--看看你能不能找出你的代码出了什么问题。

抛开所有这些,不需要跳过所有这些障碍来递增数据库字段……

代码语言:javascript
复制
mysql_query('UPDATE votes SET no = no+1 WHERE id='.$id);

作为参考,快速重写示例代码如下所示(使用您的方法,而不是我上面提到的方法):

代码语言:javascript
复制
$dblocation = "localhost";
$dbname = "xx";
$dbuser = "xx";
$dbpasswd = "xx";
$dbcnx = mysql_connect($dblocation,$dbuser,$dbpasswd);
// handle a problem connecting to the database.  You probably want to do something nicer than just "die" an error message
if (!$dbcnx)
    die('Error connecting to database');

mysql_select_db($dbname, $dbcnx);

// not strictly neccesary to do this
mysql_query("SET NAMES utf8");
mysql_query("SET COLLATION_CONNECTION=utf8_bin");


$query = mysql_query('SELECT `no` FROM `votes` WHERE `id`='.$id);
// again, you'll probably want to do something nicer than blat out a text error
if (!$query)
    die('Record not found');

$num = mysql_fetch_assoc($query);
// type your number
$num = (int) $num['no'];

// increment it
$num++;

mysql_query('UPDATE `votes` SET `no`='.$num.' WHERE `id`='.$id);
票数 1
EN

Stack Overflow用户

发布于 2011-06-04 01:30:09

这里有几个地方可能会出错-

可能没有正确连接到database

  • mysql_query()返回一个资源,然后必须由一个行提取函数(如mysql_fetch_assoc() )使用该资源,因此您正在抑制来自

  • ()的mysql_connect()错误。你不能像以前那样使用它的结果。

基本上,在开发过程中,您应该以最高的error_reporting级别运行代码。您将立即知道问题出在哪里(并将错误抑制操作符放在mysql_connect()前面--几乎没有充分的理由使用它)。

顺便说一句,没有理由为检索数字设置排序规则和字符集。这个完整的操作可以用一个更新查询来代替:

代码语言:javascript
复制
$query = "UPDATE votes SET no=no+1 WHERE id=" . (int) $id;
票数 2
EN

Stack Overflow用户

发布于 2011-06-04 01:29:18

您错过了从结果中获取行:

代码语言:javascript
复制
$result= mysql_query("select no from votes WHERE id='".$id."';");
// you have to fetch a row from the result
$row = mysql_fetch_array($result);
// your first item in the array will be the value of 'no'
$num2 = $row[0] + 1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6230495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档