2014-04-02 68 views
0

我有此PHP代码来填充一个表的一些数据来的思想报分贝, 但是当我exec的它说PHP的MySQL查询致命错误

"Fatal error: Call to undefined method MysqlClass::query()" 


<?php 
include "config.php"; 
$data = new Mysqlclass(); 
$data->connetti(); 
$post_sql = $data->query("SELECT * FROM products ORDER BY id DESC"); 
if(mysql_num_rows($post_sql) > 0) 
    {while($post_obj = $Data->estrai($post_sql)) 
     {$id=$post_obj->id; 
      $name = stripcslashes($post_obj->name); 
      $cat = stripcslashes($post_obj->category); 
      $price= stripcslashes($post_obj->price); 
      echo "<td>".$id."</td>"; 
      echo "<td>".$name."</td>"; 
      echo "<td>".$cat."</td>"; 
      echo "<td>".$price."</td>"; 
     } 
    }else{ 
     echo"Tabella vuota"; 
    } 
    $data->disconnetti(); 
?> 

的错误是在2线时,我声明$Data->query

也许功能查询不正确,我是新的PHP脚本。

我已经在教程中使用了这段代码。我不知道“查询”和“estrai”(提取)键是否正确。

下面是配置文件:

<?php 

    class MysqlClass 
    { 
     private $nomehost = "localhost";  
     private $nomeuser = "root";   
     private $password = "xxxxx"; 
     private $nomedb = "intse"; 
     private $attiva = false; 
     public function connetti() 
     { 
     if(!$this->attiva) 
     { 
      if($connessione = mysql_connect($this->nomehost,$this->nomeuser,$this->password) or die (mysql_error())) 
      { 
      $selezione = mysql_select_db($this->nomedb,$connessione) or die (mysql_error()); 
      } 
     } else{ 
      return true; 
     } 
     } 
     public function disconnetti() 
     { 
     if($this->attiva) 
     { 
      if(mysql_close()) 
      { 
      $this->attiva = false; 
      return true; 
      } else { 
      return false; 
      } 
     } 
     } 
    } 
    ?> 

http://imageshack.com/a/img35/1966/pd0v.png 所以现在我必须填写与DB 2日进入和ROW3与DB 3项2行,并增加HTML表格的行数,以填补其他数据库条目。 谢谢。

+0

您与db的连接失败。你需要弄清楚为什么。 –

+3

不知道没有看到类文件 – Steve

+0

谢谢我会检查配置,也许mysql不接受我的连接 – andreyo

回答

0

变量区分大小写,($ Data-> estrai);
使用$ data-> query将使用MysqlClass类中的查询方法,而不是系统预定义的查询方法,您需要为其编写一个查询方法。 如果你想像你的类一样使用$ data-> method()方法,你需要在你的类中构建它。例如

public function query($sql) { 

    return mysql_query($sql); 

} 

此外,我不能看到$ this-> attiva的用法,因为您没有将它设置为TRUE的地方。 $ selezione也没用。

更新:

mysql_select_db只返回一个布尔值,你不需要它除了报告失效选择(模具)。
它应该是这样的(如果我没有做任何语法错误。):

<?php 

include 'config.php'; 

$data = new MysqlClass(); 
$data->connetti(); 

$post_sql = $data->query("SELECT * FROM products ORDER BY id DESC"); 

if(mysql_num_rows($post_sql) > 0) { 

    while($post_obj = $data->estrai($post_sql)) { 

     // the data it returns is an array, not object 
     // so it should be $post_obj['key'] not $post_obj->key 

     $id = $post_obj['id']; 
     $name = stripcslashes($post_obj['name']); 
     $cat = stripcslashes($post_obj['category']); 
     $price = stripcslashes($post_obj['price']); 

     echo "<td>".$id."</td>"; 
     echo "<td>".$name."</td>"; 
     echo "<td>".$cat."</td>"; 
     echo "<td>".$price."</td>"; 
    } 

} else { 

    echo 'Tabella vuota'; 

} 

$data->disconnetti(); 

?> 

<?php 

class MysqlClass { 

    private $nomehost = 'localhost';  
    private $nomeuser = 'root';   
    private $password = 'xxxxx'; 
    private $nomedb = 'intse'; 
    private $attiva = FALSE; 
    private $connessione; 

    public function connetti() { 

     if(!$this->attiva && ($this->connessione = mysql_connect($this->nomehost, $this->nomeuser, $this->password) or die(mysql_error()))) { 

      mysql_select_db($this->nomedb, $this->connessione) or die(mysql_error()); 
      $this->attiva = TRUE; // Now this becomes useful, because the value has been set 

     } 

     return $this->attiva; 

    } 

    // Method to build up the query 

    public function query($sql) { 

     return mysql_query($sql, $this->connessione); 

    } 

    // Method to extract information from the query 

    public function estrai($query) { 

     return mysql_fetch_array($query, MYSQL_ASSOC); 

    } 

    public function disconnetti() { 

     // More straight forward way to return the status 

     if($this->attiva) return mysql_close($this->connessione); 

     return FALSE; 

    } 

} 

UPDATE2:

<?php 

include 'config.php'; 

$data = new MysqlClass(); 
$data->connetti(); 

$post_sql = $data->query("SELECT * FROM products ORDER BY id DESC"); 

echo '<table>'; 

if(mysql_num_rows($post_sql) > 0) { 

    while($post_obj = $data->estrai($post_sql)) { 

     // the data it returns is an array, not object 
     // so it should be $post_obj['key'] not $post_obj->key 

     $id = $post_obj['id']; 
     $name = stripcslashes($post_obj['name']); 
     $cat = stripcslashes($post_obj['category']); 
     $price = stripcslashes($post_obj['price']); 

     echo '<tr>'; 

     echo "<td>".$id."</td>"; 
     echo "<td>".$name."</td>"; 
     echo "<td>".$cat."</td>"; 
     echo "<td>".$price."</td>"; 

     echo '</tr>'; 

    } 

} else { 

    echo 'Tabella vuota'; 

} 

echo '</table>'; 

$data->disconnetti(); 

?> 
+0

对不起,但我是小菜鸟的PHP,如果可能的话,你可以进行修改并重新发布文件? $ selezione(select)做dbname的选择,是不正确的? – andreyo

+0

@andreyo看到我做的更新 –

+0

非常感谢你,现在我已经完成了表的填充,现在真正的问题是:我在页面中有很多行,并且在db中有很多行,我必须填满所有的表格并添加新行以填充页面中的所有产品,我如何添加新行?如果我将这个代码复制到新表格行中,它会填充第一个记录。有一种方法可以添加第二个,第三个ecc .. row? – andreyo

0

在具体的行,你有一个错误:

$post_sql = $data->query("SELECT * FROM products ORDER BY id DESC"); 

改成这样:

$post_sql = $Data->query("SELECT * FROM products ORDER BY id DESC"); 

变量$ Data必须始终为大写(因为您是这样创建的),PHP是区分大小写的语言。

希望它有帮助。