Home  >  Article  >  Backend Development  >  请问:mysql数据库有个游标吗

请问:mysql数据库有个游标吗

WBOY
WBOYOriginal
2016-06-23 13:55:421104browse

大哥, 我想做个PHP文件, 访问一次这个PHP文件, 从数据库取一条记录, 第二次访问, 取下一条,

如何才能实现呢?游标怎么用法,?不太会写SQL语句.  谢谢了


回复讨论(解决方案)

这个不需要用MYSQL内的游标,在PHP中实现记录集的逐条访问就行了。

使用 limit 子句指定

使用$query="select * from cmsecms_custinfo LIMIT 1";取得一条记录,  第二次还是这条记录, 是不是要加个变量
$query="select * from cmsecms_custinfo LIMIT  $ddd,1";  $ddd = $ddd+1; 之类的呢? 谢谢

使用$query="select * from cmsecms_custinfo LIMIT 1";取得一条记录,  第二次还是这条记录, 是不是要加个变量
$query="select * from cmsecms_custinfo LIMIT  $ddd,1";  $ddd = $ddd+1; 之类的呢? 谢谢



$offset = 10; // 偏移值
$limit = 1;     // 取多少条
$query="select * from cmsecms_custinfo LIMIT $offset, $limit"

例如,获取第11-15条记录。
$query="select * from cmsecms_custinfo LIMIT 10, 5"

是的,需要加个变量
并且这个变量是独立与程序的。可通过 url 传递,也可保存于 session 中

楼上大哥,我用的是静态变量,
static $cursor=0;
$query="select id,title,email from cmsecms_custinfo where id>'$cursor' LIMIT 1";
$cursor=$cursor+1;
$sql=$empire->query($query);

但PHP页面每次刷新时, $cursor还是0, 就是还是取得第一条记录, 怎么用静态变量,或全局变量?

不懂session怎么用, 谢谢了

所以我说“这个变量是独立于程序的”
而静态变量是存在于程序中的

使用 session 的一个方案是

session();if(! $_SESSION['cursor'])) $_SESSION['cursor'] = 0;$_SESSION['cursor']++;$cursor = $_SESSION['cursor'];$query="select id,title,email from cmsecms_custinfo LIMIT $cursor";

楼上大哥,我用的是静态变量,
static $cursor=0;
$query="select id,title,email from cmsecms_custinfo where id>'$cursor' LIMIT 1";
$cursor=$cursor+1;
$sql=$empire->query($query);

但PHP页面每次刷新时, $cursor还是0, 就是还是取得第一条记录, 怎么用静态变量,或全局变量?

不懂session怎么用, 谢谢了



谁告诉你静态变量刷新会保留的。。。?

session的话我提供一个例子给你参考
session_start();if(!issert($_SESSION['cursor'])){    $_SESSION['cursor'] = 0;}else{    $_SESSION['cursor'] ++;}$cursor = $_SESSION['cursor'];$query="select id,title,email from cmsecms_custinfo where LIMIT $cursor, 1";$sql=$empire->query($query);

手滑了一下。
应该这样:

session_start();if(!isset($_SESSION['cursor'])){ // 改了这里。    $_SESSION['cursor'] = 0;}else{    $_SESSION['cursor'] ++;} $cursor = $_SESSION['cursor']; $query="select id,title,email from cmsecms_custinfo where LIMIT $cursor, 1";$sql=$empire->query($query);

好的我试试, 有个疑问: 同一终端刷新这个PHP, 可以实现自动取下一条的话, 不同终端能实现吗?

也就是这个session是存在服务器呢还是本地呢? 我先试试吧

出现:
PHP Warning:  session_start(): open(/tmp\sess_usuklqaaeh5j7tmrfh04vv9a54, O_RDWR) failed: No such file or directory (2) in D:\inetpub\CMS7\e\admin\ListOneInfo.php on line 46
PHP Warning:  Unknown: open(/tmp\sess_usuklqaaeh5j7tmrfh04vv9a54, O_RDWR) failed: No such file or directory (2) in Unknown on line 0
PHP Warning:  Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0

使用 session 这是各个终端自行变化
如果要让效果是这对所有终端的话,则需要将变量保存于数据库、文件、共享内存等中

出现:
PHP Warning:  session_start(): open(/tmp\sess_usuklqaaeh5j7tmrfh04vv9a54, O_RDWR) failed: No such file or directory (2) in D:\inetpub\CMS7\e\admin\ListOneInfo.php on line 46
PHP Warning:  Unknown: open(/tmp\sess_usuklqaaeh5j7tmrfh04vv9a54, O_RDWR) failed: No such file or directory (2) in Unknown on line 0
PHP Warning:  Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0


因为你的是windows系统,没有/tmp,解决方法如下:
1.在 D:\inetpub\CMS7后建立一个tmp的folder 即 D:\inetpub\CMS7\tmp
2.将php.ini的 session.save_path = "/tmp" 改为 session.save_path = "D:\inetpub\CMS7\tmp"
3.重启服务

改了所有的PHP.INI,  重启服务,  还有一样错误, 奇怪了, 
我先试试将变量保存于数据库、文件、共享内存等中, 不知道哪个简单 些

改了所有的PHP.INI,  重启服务,  还有一样错误, 奇怪了, 
我先试试将变量保存于数据库、文件、共享内存等中, 不知道哪个简单 些



那就是你服务器没有配置好了,如果先测试,可以把变量写文件吧。

$file='session.txt';
if(!file_exists($file)){
    $cursor = 0;
    file_put_contents($file, 0, true);
}else{
    $cursor = file_get_contents($file);
    $cursor ++;
    file_put_contents($file, $cursor, true);
}
  
$query="select id,title,email from cmsecms_custinfo where LIMIT $cursor, 1";
$sql=$empire->query($query);

大侠, 我看共享内存的功能,还要看在windows的时候只有在php是ISAPI运行模式才能正常工作,在安装php的时候要加上?enable-shmop。, 要怎么查看PHP是否支持共享内存?

好,还是用文件问题少, 谢谢大哥

用session好,用文件不好,因为文件是所有用户共享的。当不同用户访问。例如A先访问了10次,然后B访问,就会从11条记录开始显示了。
配置好服务器用session吧。刚才那个只是提供保存的思路,所以可以用文件做一下原型来说明。
用文件是不行的,不是坑你。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn