3

所以我有这个功能来搜索 MySQL 数据库中的条目:

<?php
private function SearchContributors($search) 
    {
    $search_pieces = explode(' ', $search);

    if (count($search_pieces) == 1 )
        {
        $this->db->like('firstname', $search);
        $this->db->or_like('lastname', $search);   
        $result = $this->db->get(); //the line from the error message below
        }   
    
    //Other stuff for 2 and more pieces
    
    return $result;
    }
?>

我两次使用该功能。

案例 A是用户发起的搜索,并从 URL ( domain.com/contributors/?x=paul) 获取搜索查询。这工作正常。

<?php
if (isset($_GET['x']))
    {
    $x = $_GET['x']; 
    $result = $this->SearchContributors($x);
    }
?>

案例 B是当用户输入无效的 slug 名称(domain.com/contributors/paul而不是domain.com/contributors/pauline-surname)并直接获取搜索查询时的备份:

<?php
$this->db->where('slug', $slug);
$result = $this->db->get();    
if ($result->num_rows() == 0)
    {
    $x = str_replace('-', ' ', $slug);
    $result = $this->SearchContributors($x);
    }
?> 

这返回了一个 MySQL 语法错误:

错误号:1064

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 'WHERE firstnameLIKE '%paul%' OR lastnameLIKE '%paul%''附近使用正确的语法

SELECT * WHERE firstnameLIKE '%paul%' OR lastnameLIKE '%paul%'

文件名:/www/htdocs/w00a94ee/c/controllers/contributors.php

行号:23

该函数在两种情况下都获得了相同的字符串paul,那么为什么它不起作用呢?

//编辑

function __construct()
    {
    parent::__construct();
    $this->load->database('databasename');
    $this->db->from('tablename');
    }
4

2 回答 2

3

您忘记指定要选择的表FROM

$this->db->from('tablename');

编辑:问题是您from在构造函数中添加了,然后您正在调用:

$this->db->where('slug', $slug);
$result = $this->db->get();  

打电话之前SearchContributors。这将运行查询并重置变量。

因此,当您调用 时SearchContributorsFROM不再设置。

您需要放入$this->db->from('tablename');内部SearchContributors不是构造函数。使模型函数自包含,而不需要外部函数(例如__construct调用它们)通常是一个好主意。

于 2012-08-09T14:32:47.937 回答
0

您缺少 get('table_name');

if (count($search_pieces) == 1 )
    {
    $this->db->like('firstname', $search);
    $this->db->or_like('lastname', $search);   
    $result = $this->db->get('Your_tablename'); //-->>Here you can go
    }  

查看错误

select * WHERE......

但是“从表哪里”在哪里......??我认为这是我亲爱的问题

在这里你也可以改变

$this->db->where('slug', $slug);
$result = $this->db->get('My_Table'); 
于 2012-08-30T07:47:50.383 回答