V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lyp111332
V2EX  ›  PHP

请教个简单的问题

  •  
  •   lyp111332 · 2016-06-16 09:45:46 +08:00 · 3834 次点击
    这是一个创建于 3113 天前的主题,其中的信息可能已经有所发展或是发生改变。
    function fetchOne($sql,$result_type=MYSQL_ASSOC){
    $result=mysql_query($sql);
    $row=mysql_fetch_array($result,$result_type);
    return $row;
    }
    我这个函数主要是为了指定得到一条记录,为什么$row=mysql_array($result,$result_type);这条语句会报错?
    报错代码: mysql_arrray()expcts parameter 1 to be resource, boolean given
    31 条回复    2016-06-18 02:36:43 +08:00
    66beta
        1
    66beta  
       2016-06-16 09:59:11 +08:00
    val_dump 打印$result 自己看
    jswh
        2
    jswh  
       2016-06-16 10:00:42 +08:00
    出错了吧, mysql_query 里也没见 connect
    alex321
        3
    alex321  
       2016-06-16 10:03:42 +08:00
    $result 没结果。。参见官方手册: http://php.net/manual/en/function.mysql-query.php
    然后,换到 mysqli 吧。。。
    lyp111332
        4
    lyp111332  
    OP
       2016-06-16 10:07:47 +08:00
    @66beta
    @alex321
    @jswh $sql 语句 我是这样写的 $sql="SELECT * FROM admin where username='$username' and password='$password'"
    JiShuTui
        5
    JiShuTui  
       2016-06-16 10:08:23 +08:00
    mysql_arrray 第一个参数必须是资源 resource 类型,结果你给了布尔 boolean 类型
    所以 $result 是布尔类型,而且可以推测出是 FALSE ,也就是说 mysql_query($sql) 返回 FALSE 了, sql 语句没有正确执行
    JiShuTui
        6
    JiShuTui  
       2016-06-16 10:10:01 +08:00
    你把 $sql 打印出来看看拼出来的 sql 语句是啥
    lyp111332
        7
    lyp111332  
    OP
       2016-06-16 10:16:09 +08:00
    @JiShuTui 噢,那请问下如何将布尔 boolean 类型改为资源 resource 类型
    lyp111332
        8
    lyp111332  
    OP
       2016-06-16 10:26:14 +08:00
    @JiShuTui $sql= "select * from admin where username='{$username}' and password='{$password}'"
    wesley
        9
    wesley  
       2016-06-16 10:29:20 +08:00
    1. 你的 mysql 连接在哪里?

    2. mysql_*系列函数在 php7 中已经移除

    3. mysql_query 还少个参数
    raincious
        10
    raincious  
       2016-06-16 10:29:30 +08:00
    > 噢,那请问下如何将布尔 boolean 类型改为资源 resource 类型

    噗。

    $result=mysql_query($sql);

    if (!$result) {
    return false;
    }
    lyp111332
        11
    lyp111332  
    OP
       2016-06-16 10:47:45 +08:00
    @wesley mysql 连接 con = mysql_connect("localhost","root","root");
    if (!$con)
    {
    die('Could not connect: ' . mysql_error());
    }


    mysql_select_db("emp", $con);
    mysql_set_charset(utf8);
    我现在用的是 php5.4
    raincious
        12
    raincious  
       2016-06-16 12:02:55 +08:00
    @lyp111332

    你应该更仔细的检查一下边际情况。

    `mysql_select_db`,`mysql_set_charset`这两个函数都会在错误的时候返回 false ,你需要检查它们的执行结果,而不是盲目的假定他们执行了而跳过检查。

    建议你还是用一个数据库操作类来处理与 MySQL 的交互,比如用 http://medoo.in ,而不要自己手动去做。
    Jakesoft
        13
    Jakesoft  
       2016-06-16 12:28:41 +08:00
    总对用 mysql_query 函数持鄙夷的眼光,我这是什么心态?
    oyxhm
        14
    oyxhm  
       2016-06-16 16:57:37 +08:00
    @Jakesoft 为什么我也是,用个 PDO 都好
    touch
        15
    touch  
       2016-06-16 17:24:28 +08:00
    赶紧换 PDO 吧
    leetao94
        16
    leetao94  
       2016-06-16 17:27:39 +08:00
    为啥不换 PDO
    Sunyanzi
        17
    Sunyanzi  
       2016-06-16 18:34:16 +08:00   ❤️ 8
    只有我觉得 LZ 的问题整个都很奇怪吗 ... mysql 扩展根本就没有 mysql_arrray 这么个函数 ...

    语句报错和错误代码说的应该都是 mysql_fetch_array 的事 ... 我想不通为什么复制都能复制错 ...

    楼上都在说楼主得到这个错误可能的原因 ... 而我根本不打算解释这个 ... 因为说对了也没意义 ...

    一直以来我都在各种时间各种地点反复不停的重申不要用 mysql 系列的函数 ... 看来还是收效甚微 ...

    现在 2016 年都过去一半了我居然还是能看到这么连数据库的新人 ... 略可悲 ...

    说回正事 ... 如果你只是想连数据库的话 ... 把你现在所有跟数据库有关的代码都删了换成下面的 ...



    这代码我专门为你写的 ... 我故意没贴文本而是贴的图 ... 你需要照着我写的重新自己手打一遍 ...

    代码不长 ... 我简化了各种东西只留下核心部分 ... 你也过过脑子 ... 别总是复制粘贴吃现成的 ...

    第四行到第七行的四个类常量是配置 ... 需要按你的环境改 ... 其他保持不动就可以 ...

    这是教学类的代码 ... 并不适合生产 ... 不够优化而且 PDO->query 和错误详情什么的我也没写 ...

    总之先学会走再想办法跑起来 ... 等你习惯 prepare / execute 之后再自己来优化我这个例子就好 ...

    使用方法在下面象征性的给你写了几个 ... 虽然不强求但最好养成大小写和使用 backtick 的习惯 ...



    大体就是这样 ... 你有什么问题再问吧 ... 以及赶紧把过时的教程扔了 ... 实在太误人子弟 ...
    ragnaroks
        18
    ragnaroks  
       2016-06-16 20:47:40 +08:00
    没有框架的话,建议立刻使用 PDO.
    eoo
        19
    eoo  
       2016-06-16 22:44:35 +08:00 via Android
    mysqli pdo 按自己需要你选一个
    Jakesoft
        20
    Jakesoft  
       2016-06-16 23:21:15 +08:00
    @Sunyanzi 赞,不过你的代码如何实例化?,好像没有 public 的实例化方法
    Sunyanzi
        21
    Sunyanzi  
       2016-06-17 00:02:00 +08:00
    @Jakesoft 类不是一定要实例化成对象才能用的 ... 我例子里的这个 database 类就是个静态类 ...

    因为准备让 LZ 手抄代码才没写 abstract 上去 ... 毕竟这例子讲的是数据库操作而不是面向对象 ...

    另外针对楼上诸多只留下一句「用 PDO 」的回复我再补一句 ... PDO 和 MySQLi 不是解决方案 ...

    虽然我例子里也用了 PDO 但更重要的是我用了 PreparedStatement ... 这才是我要突出的重点 ...

    不要觉得用 PDO 就没事了 ... 如果你保持这个用户输入直接进 SQL 的习惯 ... 谁也救不了你 ...
    Jakesoft
        22
    Jakesoft  
       2016-06-17 00:20:22 +08:00
    @Sunyanzi 眼瞎,没有仔细看_query 这个方法
    audi
        23
    audi  
       2016-06-17 06:30:10 +08:00 via iPhone
    @Sunyanzi 私有方法下划线开头 -1
    cxbig
        24
    cxbig  
       2016-06-17 07:59:29 +08:00
    换 PDO+1
    不要浪费时间探讨被淘汰的东西
    466934322
        25
    466934322  
       2016-06-17 08:29:52 +08:00 via Android
    @eoo 徐大大?我是你的 fans
    lyp111332
        26
    lyp111332  
    OP
       2016-06-17 09:01:15 +08:00
    @Sunyanzi 我是看慕课网的视频在学的。= = 这个方法过时了 那请问下该去哪里学习才能学习到不过时的方法。。
    miaotaizi
        27
    miaotaizi  
       2016-06-17 09:13:59 +08:00
    @Sunyanzi 师傅, 请受徒儿一拜!
    eoo
        28
    eoo  
       2016-06-17 12:46:20 +08:00 via Android
    @466934322 纳尼? 啥意思?
    Sunyanzi
        29
    Sunyanzi  
       2016-06-17 13:13:44 +08:00
    @audi 居然是减一吗 ... 不过私有成员名以下划线开头只是我个人习惯 ... 你不用也没什么问题的 ...

    @lyp111332 我并没有说慕课网过时了 ... 我是说你现在看的那个视频关于数据库这块儿过时了 ...

    如果你现在还不能区分一个教程好坏的话 ... 最简单的办法 ... 其他都听教程的数据库操作听我的 ...

    我那段代码写的挺认真的 ... 考虑了你要手抄时的感受 ... 一个字符都不多也一个字符都不少 ...

    那就是准确而且时尚的教程 ... 我把它明明白白的给你摆在上面 ... 这你还要问实在是太伤我心了 ...

    @miaotaizi 么么哒 ...
    lyp111332
        30
    lyp111332  
    OP
       2016-06-17 15:52:22 +08:00
    @Sunyanzi 感谢 握手 可以加个 QQ 不懂的可以请教下你 可以吗 么么哒
    Sunyanzi
        31
    Sunyanzi  
       2016-06-18 02:36:43 +08:00
    @lyp111332 有问题直接发在 V2 上就好啦 ... 在这边你随时发问随时都有人答的 ...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1034 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:11 · PVG 04:11 · LAX 12:11 · JFK 15:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.