如何使用Code Igniter从MySQL数据库获取数据?

问题描述:

这是我第一次尝试网络编程,我目前正在尝试使用Code Igniter。我得到这个从教程,但我的问题似乎有点不同,我试了好东西,但没有工作如何使用Code Igniter从MySQL数据库获取数据?

所以我想从我的数据库获取数据,这里是我的代码

public function can_log_in($username, $password){ 

    $query = $this->db->query("SELECT col1, col2 FROM table1 where id_login = '$username' and id_password = '$password'"); 

    $data = mysql_fetch_row($query); //got error this line, and several line also on libraries and helper 
    if ($query->num_rows() == 1){ 
     return (string) $data[0]; 
    }else { 
     return "0"; 
    } 
} 

错误说:

提供的参数不是一个有效的MySQL结果资源

在控制器我用:

if($this->model_get->can_log_in($username, $password) != "0") 

老实说我不知道​​这个工作还是应该用<>?没有机会尝试,但这是另一个问题。

那么我怎么能在这里得到col1和col2?

+0

'mysqli_fetch_row($查询)' – 2014-10-08 03:25:59

+0

@弗雷德-II- “预计参数1被mysqli_result,对象给予” – Darjeeling 2014-10-08 03:27:35

+0

你确定你使用的整个'mysqli_'? – 2014-10-08 03:31:42

由于您使用笨,只是忠实于它,使用它的内置功能:

public function can_log_in($username, $password) 
{ 
    $username = $this->db->escape($username); // this automatically adds single quotes 
    $password = $this->db->escape($password); 
    $query = $this->db->query("SELECT col1, col2 FROM table1 where id_login = $username and id_password = $password"); 
    if($quer->num_rows() > 0) { 
     $data = $query->row(); // fetches single row 
     return $data->col1; 
    } 
} 

我也建议使用codeigniters活动记录,这样你就不必担心逃逸。他们已经把它给你:

public function can_log_in($username, $password) 
{ 
    $this->db->select('col1', 'col2'); 
    $this->db->where('username', $username); 
    $this->db->where('password', $password); 
    $query = $this->db->get('table1'); 

    return ($query->num_rows() > 0); 
} 

在控制器:

$username = $this->input->post('username'); 
$password = $this->input->post('password'); 
$can_log = $this->model_name->can_log_in($username, $password); 
if($can_log) { 
    // yahoo! can log! 
} else { 
    // sorry but you cannot! 
} 
+0

是啊,我看到的教程也表示使用“$ this-> db-> select”,但是我的查询要复杂得多,我只是在这里简单说明,这就是为什么我尝试了不同的方式。 – Darjeeling 2014-10-08 03:41:23

+0

@ student080705639好吧,你可以使用第一个答案,如果你想在你的查询更*,只记得逃避这些输入,不要直接注入他们 – Ghost 2014-10-08 03:53:59

+0

@ student080705639第二个答案只是一个建议 – Ghost 2014-10-08 03:54:57

试试这个:

$query = $this->db->query("SELECT col1, col2 FROM table1 where id_login = '$username' and id_password = '$password'"); 

$data = $query->row_array(); 

if ($query->num_rows() == 1){ 
    return (string) $data['col1']; // Need to give the field name 
}else { 
    return "0"; 
} 

在PHP中,你需要连接到使用

$link = mysqli_connect("myhost","myusername","mypassword","mybd") or die("Error " . mysqli_error($link));数据库

一旦你连接到数据库,可以查询使用

$data = mysqli_query($con,"SELECT * FROM tablename"); 

看着你写的是什么数据库,好像因为你没有连接到数据库来查询你的代码是打一个错误。建立连接后,您可以使用循环提交查询并解析它们,以列举每行结果

for($i = 0;$i<mysqli_num_rows($data);$i++) { 
    $row = mysqli_fetch_row($data)); 
    $username = row[0]; //usernames are column 1 
    $password = row[1]; //passwords are column 2 
    } 

依此类推。您可以阅读更多关于using PHP at PHP.net

CodeIgniter提供了几种方法来执行查询结果。

在这里看到:https://ellislab.com/codeigniter/user-guide/database/results.html

result()返回PHP对象的数组。

row()返回该行的单个PHP对象。

result_array()返回数组数组。

row_array()为该行返回单个数组。

row()row_array()可以选择一个参数,它是您想要返回的行的数量。

$rows = $query->result(); //array of objects 
$rows_array = $query->result_array(); //array of arrays 
$row = $query->row(); //single object 
$row_array = $query->row_array(); //single array