PHP MYSQL数据库连接出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP MYSQL数据库连接出错相关的知识,希望对你有一定的参考价值。

mysql_close(): no MySQL-Link resource supplied in

上是错误提示!!!

下面是我的代码:

<?php
session_start();
if($_SESSION['admin']=="OK")

$conn=mysql_connect("localhost","root","");

mysql_select_db("livredor3");

$exec="select * from contents";

$result=mysql_query($exec);
while($rs=mysql_fetch_object($result))

echo "<table><tr><td>ID:".$rs->id."</td></tr>";
echo "<table><tr><td>nom:".$rs->nom."</td></tr>";
echo "<table><tr><td>".$rs->datee."</td></tr>";
echo "<tr><td>".$rs->contenu."</td></tr></table><br/>";
echo "<a href=modif.php?id=".$rs->id." >modifier </a> <a href=supprimer.php?id=".$rs->id." >supprimer </a>";

echo "<br><br><br><br><br><a href=index.php >retour a accueil </a>";

mysql_close();

/*
$conn=mysql_connect("localhost","root","");
if(!$conn)echo "fail ";
elseecho "succie ";;
mysql_close();
*/

?>

问题找遍,密码用户端口什么都没问题,我在最后单独测试可以链接到数据库。还有我是本地数据库。PHP版本也没问题~~!!!!MYSQL模块肯定运行了,我可以从浏览器进入数据库。。可是不知道为什么还是出错!!

跪求回答了!!

20分给你!!
回1楼,我试了下mysql_close($conn)

Warning: mysql_close() expects parameter 1 to be resource, null given in C:\xampp\htdocs\juhu\liveredor2\admin_index.php on line 22

这个是什么意思?如何解决?

回2楼

mysql_select_db("livredor3",$con); 问题依旧!

回4楼~!

我重建一个数据库表格一样出错,···逼我重装XAMPP????

参考技术A 有几个可能:
1.程序是通过这个判断if($_SESSION['admin']=="OK")才进行连接数据库的。当这个条件不成立,则mysql并没有连接,所以mysql_close()才会报错。

2.试试mysql_close($conn)本回答被提问者采纳
参考技术B 我帮你运行了下但是没有错误
说明是你的mysql有问题
下面是我的代码
<?php

$conn=mysql_connect("localhost","root","123456");

mysql_select_db("am");

$exec="select * from member";

$result=mysql_query($exec );
while($rs=mysql_fetch_object($result))

echo "<table><tr><td>ID:".$rs->id."</td></tr>";
echo "<table><tr><td>nom:".$rs->nom."</td></tr>";
echo "<table><tr><td>".$rs->datee."</td></tr>";
echo "<tr><td>".$rs->contenu."</td></tr></table><br/>";
echo "<a href=modif.php?id=".$rs->id." >modifier </a> <a href=supprimer.php?id=".$rs->id." >supprimer </a>";

echo "<br><br><br><br><br><a href=index.php >retour a accueil </a>";

mysql_close();

/*
$conn=mysql_connect("localhost","root","");
if(!$conn)echo "fail ";
elseecho "succie ";;
mysql_close();
*/

?>
这里是我的结果
X-Powered-By: PHP/5.2.0
Content-type: text/html

<table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><table><tr><td>ID:</td></tr><table><tr><td>nom:</td></tr><table><tr><td></td></tr><tr><td></td></tr></table><br/><a href=modif.php?id= >modifier </a> <a href=supprimer.php?id= >supprimer </a><br><br><br><br><br><a href=index.php >retour a accueil </a>
参考技术C 当 $_SESSION['admin']=="OK" 才会连接数据库,如果不成立的话,那么就不会生成数据库连接,这个时候执行mysql_close().就会出错

你应该把mysql_close()放到 if循环里面。
参考技术D 是啊,因为你连接数据库是在if语句里的,那么你关闭的时候也应该在if语句里。。。还有,那句话的意思就是没有数据库连接资源被提供。。。对了,以后有什么问题问我吧,我虽然技术不太精,但是在一起学习的几个学长都到了能给企业做网站的程度了。。。 第5个回答  2010-06-06 mysql_select_db("livredor3",$con);

在 Kubernetes 上使用 Wordpress、MySQL、Nginx “建立数据库连接时出错”

【中文标题】在 Kubernetes 上使用 Wordpress、MySQL、Nginx “建立数据库连接时出错”【英文标题】:"Error establishing a database connection" using Wordpress, MySQL, Nginx on Kubernetes 【发布时间】:2019-06-24 01:26:19 【问题描述】:

我正在 Kubernetes 上使用 Wordpress、php-fpm、nginx 和 mysql 部署应用程序。我采取的步骤是:

    使用 helm 部署 mysql 将 pod 公开为 clusterIP 服务并将我的表转储到数据库中 使用 nginx 容器将我的 wordpress/php 应用程序部署在同一个 pod 中 公开clusterIP服务并设置入口/TLS

数据库似乎正在运行,我可以使用以下命令连接到它并查看我的表:echo "mysql -pXXX" | kubectl exec -it &lt;mysql-pod&gt;。第 4 步(ssl 证书和入口)也在工作,没有问题。当我尝试访问我的域时,创建两个 pod(我的应用程序和 mysql)并添加配置文件会导致此消息:

建立数据库连接时出错

我通过这个命令使用 helm 部署 mysql pod:

helm install --name mysql --set \
mysqlRootPassword=xxx,mysqlUser=xxx,mysqlPassword=xxx, \
mysqlDatabase=xxx,persistence.size=50Gi \
stable/mysql

一旦部署完成,pod 就会运行,我可以成功访问我的数据库。这是当我将表数据从本地 .sql 文件转储到创建的数据库中时,当我运行 show tables 时,它们都存在于持久存储中。这部分似乎工作正常。

我将我的 wordpress 应用程序和 nginx 容器部署在一个 pod 中,以供相互持久的卷使用。部署 yaml 如下所示:

wordpress-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - image: nginx:alpine
        name: nginx
        env:
        - name: WP_HOST
          value: wordpress
        - name: DB_HOST
          value: mysql:3306
        - name: DB_NAME
          value: xxx
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql
              key: password
        ports:
        - containerPort: 443
        - containerPort: 80
        volumeMounts:
          - name: wordpress-persistent-storage
            mountPath: /var/www/html
          - name: wp-config
            mountPath: "/etc/nginx/conf.d"
      - image: my-wordpress-php-app
        name: wordpress
        env:
        - name: MY_DB_HOST
          value: mysql:3306
        - name: MY_DB_NAME
          value: xxx
        - name: MY_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql
              key: password
        - name: MY_WP_HOME
          value: "https://example.com"
        - name: MY_WP_SITEURL
          value: "https://example.com"
        - name: WP_DEBUG_LOG
          value: "true"
        - name: WP_DEBUG
          value: "true"
        ports:
        - containerPort: 9000
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wordpress-volumeclaim
      - name: wp-config
        configMap:
          name: wp-config
          items:
          - key: wp.conf
            path: wp.conf
      imagePullSecrets:
      - name: regcred

我已经确认我可以通过我的 wordpress pod 访问我的数据库,只需连接到 mysql:3306。我检查并确认我的应用程序可以通过服务器上的 docker compose 运行,并且代码看起来很好,所以我们可以假设 wordpress 应用程序的 docker 映像也在做它应该做的事情。

作为参考,我的配置文件如下: wp.conf

    listen 80;
    listen 443 ssl;
    server_name $SITE_URL;

    root /var/www/html;
    index index.php;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    gzip off;

    types 
        ...
    

    location xxx 
        rewrite .* /index.php;
        ...
    

    location ~ '\.php$' 
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass wordpress:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        ...
    

    location / 
        autoindex off;
        ...
    

一些额外的信息,以防有帮助:

我的两个服务(mysql 和 wordpress/nginx)都是 ClusterIP 类型。在我的 mysql 服务中,我有以下内容:
    - port: 3306
      targetPort: 3306

在我的 wordpress 服务中,我有以下内容:

  - name: wordpress
    port: 9000
    targetPort: 9000
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  - port: 443
    targetPort: 443
    protocol: TCP
    name: https

我已将 mysql 密码添加为具有正确 yaml 文件和 base64 值的机密。我也尝试使用命令行来创建秘密,并且两者都不会改变结果中的任何内容。

这里有一些日志,以防它可以说明问题的任何内容(我找不到太多关于这方面的信息):

Mysql pod 日志

MySQL 初始化进程正在进行中... 警告:无法将“/usr/share/zoneinfo/Factory”加载为时区。跳过它。 警告:无法将“/usr/share/zoneinfo/iso3166.tab”作为时区加载。跳过它。 警告:无法将“/usr/share/zoneinfo/leap-seconds.list”加载为时区。跳过它。 警告:无法将“/usr/share/zoneinfo/posix/Factory”加载为时区。跳过它。 警告:无法将“/usr/share/zoneinfo/right/Factory”加载为时区。跳过它。 警告:无法将“/usr/share/zoneinfo/zone.tab”加载为时区。跳过它。 mysql: [警告] 在命令行界面使用密码可能不安全。 MySQL初始化过程完成。准备启动。

Nginx 容器日志

[11:15:03 +0000] "GET /robots.txt HTTP/1.1" 500 262 "-" "Mozilla/5.0(兼容;Googlebot/2.​​1;+http://www.google.com/bot.html)" 10.20.0.128 - - [12:17:48 +0000] "GET / HTTP/1.1" 500 262 "-" "Python/3.6 aiohttp/3.4.4" 10.20.0.128 - - [16:04:42 +0000] "GET / HTTP/1.1" 500 262 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x Safari/537.36" 10.20.0.128 - - [16:04:42 +0000] "GET /favicon.ico HTTP/1.1" 200 5 "https://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/537.36 (KHTML, like壁虎)Chrome/x Safari/537.36"

Wordpress 容器日志

127.0.0.1 - 16:04:42 +0000 "GET /index.php" 500 127.0.0.1 - 16:04:42 +0000 "GET /index.php" 200

我个人认为这里缺少一些简单的东西,但是过去几天我一直无法指出。有人知道我在这里缺少什么吗?

【问题讨论】:

我猜 Helm 创建的 Service 对象的名称更像是 mysql-mysql(更具体地说是 .Release.Name -mysql,其中的名称是 helm install --name); kubectl get services 一定会告诉你的。您需要将该名称用作$DB_HOST 名称。 在哪里添加 DB_USER 变量? 解决方案原来与你提到的有关。我发现了这个问题,Helm 创建了自己的秘密,与 mysql-helm 部署同名。当我创建 helm mysql 部署时,我给它起了名字 mysql-helm,所以它就这样了。 @大卫迷宫 在我的情况下将 DB_HOST 更改为 mysql:3306 有效 【参考方案1】:

我通过替换用于从我的 wordpress pod 访问我的数据库的秘密解决了这个问题。为了确认秘密是问题所在,我创建了一个秘密并部署了mysql,其中包含 MYSQL_ROOT_PASSWORD 的秘密参考,并提供了与我的 wordpress pod 中的 db 密码相同的秘密参考。由于他们都使用相同的秘密对象,因此这有效并修复了数据库连接问题。

修复: Helm 会自动创建一个数据库机密,其中包括您的所有密码/已使用/数据库名称条目。使用 wordpress yaml 文件中自动创建的密码,而不是您创建的密码:

helm install --name mysql-helm --set \
mysqlRootPassword=xxx,mysqlUser=xxx,mysqlPassword=xxx, \
mysqlDatabase=xxx,persistence.size=50Gi \
stable/mysql

像这样使用创建的密码:

        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-helm
              key: password

【讨论】:

以上是关于PHP MYSQL数据库连接出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 PhP 在 android 和 mysql 之间建立连接时出错

使用 PHP 连接数据库时出错

WordPress建立MySQL数据库连接IIS10时出错[重复]

在 PHP 中创建与 PDO 的连接时出错

在 PHP 中创建与 PDO 的连接时出错

在 Kubernetes 上使用 Wordpress、MySQL、Nginx “建立数据库连接时出错”