php读取mysql数据库并更新某个记录?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php读取mysql数据库并更新某个记录?相关的知识,希望对你有一定的参考价值。

举例:
ID 标记 内容
1 1 小明
2 1 小刚
3 1 小花
4 1 小军
5 1 小明
6 0 小刚
7 0 小花
8 0 小军
9 0 小明
10 0 小刚
11 0 小花
12 0 小军
13 0 小明
数据量较大.....
-----------------------------
现在希望写一个php代码
判断第一个“标记”=0的记录,并读取出来“内容”,然后再将该记录的“标记”=1

希望能够用效率最高的方法,尽量减少服务器的负载
万分感谢,在线等
做了很多测试还是行不通,下面是我写的代码,看看问题出在哪里了?
<?php
mysql_connect("localhost", "root", "123456") or die("Could not connect: " . mysql_error());
mysql_select_db('qqlist') or die('选择数据库失败');
$sql="select id,标记,内容 from 表1 where 标记='0' order by id asc limit 0,1";
$sql="update list set yifa='1' where id='$id'";
echo $id.$标记.$内容;
?>

参考技术A <?php
mysql_connect("localhost", "root", "123456") or die("Could not connect: " . mysql_error());
mysql_select_db('qqlist') or die('选择数据库失败');
$sql=mysql_query("select id,标记,内容 from 表1 where 标记=0 order by id asc limit 0,1");
$rs=mysql_fetch_array($sql);
$sql=mysql_query("update list set yifa=1 where id=$rs[id]");
echo $id.$标记.$内容;
?>
你光写变量,但不给数据库操作!
想起一个网友的名言:
做好了香喷喷的饭,但不给mysql吃,还要问mysql好吃不好吃追问

大哥,刚开始学啊,你把标准的改好我看看

参考技术B 一条SQL就可以了
update 表 set 标记=1 where 标记=0追问

只是修改第一个标记=0的记录,不是所有的都=0

追答

读出第一条内容
select ID,内容 from 表 where 标记=0 order by ID ASC LIMIT 1

更新标记为1
update 表 set 标记=1 where ID=第一条查询返回的ID

本回答被提问者采纳
参考技术C select 内容 from 表 where 标志='0'
update 表 set 标志='1' where 标志='0'追问

看似这个是读取了所有的数据再选择第一个,效率好像不高吧
有没有办法读取到第一个标记=0就停止搜索,并提取出来

追答

select id,内容 from 表 where 标志='0' order by id asc limit 0,1 //只取一条,读出id 内容,id更新用
update 表 set 标志='1' where id='$id'

要取得数据在$sql="select id,标记,内容 from 表1 where 标记='0' order by id asc limit 0,1";
后执行 mysql_fetch_array($sql);

PHP MySQL Yii - 数据库读取而不是写入

【中文标题】PHP MySQL Yii - 数据库读取而不是写入【英文标题】:PHP MySQL Yii - database reading not writing 【发布时间】:2012-12-26 15:14:36 【问题描述】:

我的本​​地灯组上有一个可用的 Yii 应用程序。现在,当我将应用程序放在灯服务器上时,应用程序读取数据库并运行,但应用程序没有成功写入数据库。我没有收到任何错误日志。有什么想法吗?

这是我更新数据库的方式:

public function actionIndex()

    if ($_GET["yep"] == "") 
      pd_error("You are not logged in!");
    
    list($uid, $domain) = preg_split("/@/",$_GET["yep"],2);
    $model=$this->loadModel($uid);
    $this->redirect($model->URL."?".$model->Unique_ID);     


public function loadModel($uid)

    $model=People::model()->findByPk($uid);
    $model->Login_Count++;
    $model->Last_Logged=date('Y-m-d H:i:s');
    if ($model->validate()) 
         $model->save();
     else  
        $this->render('notice');
    
    return $model;

奇怪的是,即使数据库没有更新 Login_Count 和 Last_Logged,用户仍然会被重定向到他们的 url,所以 sql 必须是有效的,因为通知页面永远不会加载。有什么想法吗?

更新 + 解决方案

问题最终是 mysql 服务器将自动提交设置为 false。要在应用程序级别覆盖它,将以下行添加到 config/main.php 数据库数组:

'db'=>array(
    ...
    'initSQLs'=>array('SET AUTOCOMMIT=1',),
    ...
);

Yii: using active record with autocommit off on mysql server

【问题讨论】:

你确定你的 db 用户有GRANT 用于更新/插入/删除有问题的数据库和表吗? dev.mysql.com/doc/refman/5.0/en/grant.html#grant-privileges 是的 db 用户拥有这些权限 你是如何写入数据库的?任何代码sn-p? 验证不成功 那么通知页面不会渲染吗?因为它没有渲染,所以页面被重定向到模型->url 【参考方案1】:

notice 页面的呈现不会停止您的重定向。它可能会被渲染,但由于重定向,您将无法看到它。尝试重构您的代码。

您正在验证您的模型两次,验证可能会被跳过,因为没有来自应用用户的数据。 您不检查是否确实找到了People 模型。 您可以覆盖 CWebUser::afterLogin 方法来执行此类操作(更新登录次数和上次登录日期)

也许这种方式(快速修复)会起作用:

function actionIndex()

    if ($_GET["yep"] == "") 
      pd_error("You are not logged in!");
    
    list($uid, $domain) = preg_split("/@/",$_GET["yep"],2);
    if (null === ($model=People::model()->findByPk($uid))
        throw new CHttpException(404);
    $model->Login_Count++;
    $model->Last_Logged=date('Y-m-d H:i:s');
    if ($model->save()) 
         $this->redirect($model->URL."?".$model->Unique_ID);
     else 
        // echo CHtml::errorSummary($model)
        $this->render('notice');
           

【讨论】:

感谢您指出它正在验证两次,但这并没有解决它

以上是关于php读取mysql数据库并更新某个记录?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL主从复制实现数据库服务器双机热备详细讲解

使用 PHP 更新重复的 MySQL 记录

如何使用 PHP 在 MYSQL 中的数据库表中插入、更新、删除记录时创建日志

mysql数据库从删库到跑路之mysq索引

PHP MySQLi基础教程

php+mysql 请问:用pdo如何获取某个表中记录的数目?