【问题标题】:pass MySQL link to a class method将 MySQL 链接传递给类方法
【发布时间】:2010-11-13 23:22:02
【问题描述】:

这是我的问题,我有一个带有 ave 方法的类,我想将 Mysql DB 链接传递给它,所以我从该类创建一个新对象,并调用 saveProperty 方法,并在我的主文件中创建了一个 MySQL 连接并将链接保存在一个名为 $db 的变量中,因此当我调用该方法时,它的链接是:saveProperty($db)。

但保存数据时出现错误:

警告:mysql_select_db():提供的参数不是第 75 行 C:\wamp\www\aqaria\classes\property.php 中的有效 MySQL-Link 资源

警告:mysql_query():提供的参数不是第 99 行 C:\wamp\www\aqaria\classes\property.php 中的有效 MySQL-Link 资源

这意味着我没有通过链接吗?但是怎么做?

这是我的一些代码:

<?php

  class test 
  {




    function saveProperty($db)
    {

        $sql = "<<query goes here>>" 

        mysql_query($sql,$db);

        if(mysql_affected_rows()>0)
        echo "<h3>Data was saved</h3>";
        else
        echo "<h3>Error saving data</h3>";

    }


  }

这里是调用代码:

$db = mysql_connect('localhost','root',''); 
mysql_select_db("aqaria",$db); 
$property = new Property(); 
$property->saveProperty($db);

虽然如果我将 gloabl 关键字添加到类的方法中会起作用,但我想知道是否可以将链接传递到数据库连接?

【问题讨论】:

  • 能否也粘贴调用代码?
  • $db = mysql_connect('localhost','root',''); mysql_select_db("aqaria",$db); $ 属性 = 新属性(); $property->saveProperty($db);
  • 咳嗽你能不能也把调用代码... 粘贴到你的问题中

标签: php mysql database oop class


【解决方案1】:

您的函数中没有数据库对象。

在顶部添加:

global $db;

编辑:要将其传递到您的函数中,您可以这样做:

$db = mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db("aqaria", $db) or die(mysql_error());

agar_add_offer($someDataFromSomewhere, $db);

function aqar_add_offer($data, $db)
{
    $property = new Property();

    //do some data manipulation

    $property->saveProperty($db);
} 

【讨论】:

  • 好的,谢谢,我是 php 中的 OOP 新手,所以请给我一个简单的解释?
  • 但这只是访问全局 $db var,如何在不使用全局 var 的情况下将链接传递给方法?
  • 您可以将其作为参数传递给函数
  • 我试过了,它给了我上面的错误“提供的参数不是有效的 MySQL-Link 资源”
【解决方案2】:

毫无疑问,可以在方法中传递 db_links。

警告:mysql_select_db():已提供 参数不是有效的 MySQL-Link 资源在 C:\wamp\www\aqaria\classes\property.php 在第 75 行

使用 mysql_error() 检查您的数据库凭据和输出

【讨论】:

    【解决方案3】:

    您是否尝试过参考?

    您可能还想在mysql_affected_rows() 中使用$db

    function saveProperty(&$db)
    {
    
        $sql = "<<query goes here>>" 
    
        mysql_query($sql,$db);
    
        if(mysql_affected_rows($db)>0)
        echo "<h3>Data was saved</h3>";
        else
        echo "<h3>Error saving data</h3>";
    
    }
    

    【讨论】:

    • 以前我在调用 save 属性时使用了“&”,但它不起作用,现在当我在函数声明中使用它时,一切都很好,thanx jake
    【解决方案4】:

    我只是在需要使用mysql的类的每个方法中使用全局$db。 $db 是在类之外定义的。

    有没有一种方法我不必在每种方法中都使用“global $db”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-01
      • 2016-01-26
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多