Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在CI中使用常规pdo_Php_Codeigniter_Pdo - Fatal编程技术网

Php 如何在CI中使用常规pdo

Php 如何在CI中使用常规pdo,php,codeigniter,pdo,Php,Codeigniter,Pdo,我习惯于将常规的pdo语句写入php,我如何继续这样做而不必学习活动记录或使用CI中的任何其他方法 我做了这样的事 $sql = "select column1,column2 from table where column_id = :column_id and column_2 = :something" $query = $db->query($sql); $query->bindParam(":column_id", $_GET['value'], PDO::PARAM_IN

我习惯于将常规的pdo语句写入php,我如何继续这样做而不必学习活动记录或使用CI中的任何其他方法

我做了这样的事

$sql = "select column1,column2 from table where column_id = :column_id and column_2 = :something"
$query = $db->query($sql);
$query->bindParam(":column_id", $_GET['value'], PDO::PARAM_INT);
$query->bindParam(":something", $_GET['something'], PDO::PARAM_STR);
$query->execute();

while($row = $query->fetch(PDO::FETCH_OBJ)
{
   print $row->data;
}
我可以使用$this->uri->segment()而不是使用$\u GET 希望能和这个一起工作

我看了一下活动唱片,这看起来是一个非常糟糕的主意,我不知道埃利斯塔布在想什么。不知道查询有多复杂。我是一个从网络学习的新手,我可能错了,如果我错了,请告诉我。就从我现在学到的东西来说

以其他方式编写查询语句,例如

$query=$this->db->query(“我的sql语句”),我必须使用codeigniters转义方法转义我正在查询的每个值,或者只使用mysql\u real\u转义字符串。在进入mvc世界之前,这是我可以做的,但我选择pdo是因为它已经很好地工作了

我如何实现我已经习惯的东西??我不介意修改核心文件,我希望最终能学习所有的类来对其进行反向工程,但在那一天到来之前,我希望能编写自己的mvc


谢谢

如果您没有使用ActiveRecord或其他函数,那么使用CI的DB类不会带来任何好处。为什么不直接在本地使用PDO呢

顺便说一下,你也可以这样做:

$result = $this->db->
    select(array('column1', 'column2'))->
    where(array(
        'column1' => $this->input->get('value'),
        'column2' => $this->input->get('something')
    ))->get('table')->result();

print_r($result);

对不起,我不明白这是怎么回事:

$query = $this->db->select('column1,column2')
                 ->from('table')
                 ->where('column_id',$this->input->get('value'))
                 ->where('column_2',$this->input->get('something'))
                 ->get();
return $query->results();
“看起来有很多额外的工作”而不是:

$sql = "select column1,column2 from table where column_id = :column_id and column_2 = :something"
$query = $db->query($sql);
$query->bindParam(":column_id", $_GET['value'], PDO::PARAM_INT);
$query->bindParam(":something", $_GET['something'], PDO::PARAM_STR);
$query->execute();
请记住,AR会自动转义,因此您不必担心SQL注入

如果您更习惯于查询绑定,也可以这样做

$sql = "select column1,column2 from table where column_id = ? and column_2 = ?";
$query = $this->db->query($sql, array($this->uri->segment(3), $something);
并利用参数化,而不使用活动记录类

没有什么可以阻止您使用PDO,甚至mysql_*来代替活动记录类。您的查询没有任何东西阻止CI使用它-除了必须启用的
$\u GET
数组之外,但是可以很容易地用
$this->input->GET()
替代,或者手动获取URI段,或者像通常发生的那样自动将其传递给控制器的方法

你说“我是一个从nettuts学习的新手”,但仍然说Ellisplates不知道它在做什么;虽然轻量级和远非完美的CI有一个坚实的社区,正在积极发展,其普遍共识相当高;如果它决定以这种方式拥有活动记录,那是有原因的

此外,考虑到其他更合适和真实的ORMs,类似或教理,在查询中使用类似的样式(如果您喜欢,也可以使用它们,而不是使用AR),利用PHP5级联。以下示例摘自《推进》首页:

$books = BookQuery::create()  // retrieve all books...
  ->filterByPublishYear(2009) // ... published in 2009
  ->orderByTitle()            // ... ordered by title
  ->joinWith('Book.Author')   // ... with their author
  ->find();
因此,我认为CI的活动记录的实现或结构没有什么奇怪之处。如果您的代码没有运行,请提供更多详细信息,如错误代码等,以便我们能够真正理解为什么它不工作

重要提示:

我刚读了最新版本的;请尝试下载它(版本2.10),因为它们声明:

将PDO驱动程序添加到数据库驱动程序


如果你不愿意学习CI使用的方法,没有它你可能会更好。MVC框架和它们的数据库处理常常是如此紧密地结合在一起,以至于试图应用自己的框架只会自找麻烦。你能解释一下它是如何带来麻烦的吗?我不能将我的查询添加到一个方法中,然后将其添加到某个控制器中吗?稍后,当您遇到错误或问题时,您永远无法确定这是因为您的自定义DB处理程序还是其他原因。当您不使用标准设置时,以后很难给出建议。此外,正如回答中提到的,框架为您做了大量工作,因此从长远来看,您将节省时间和精力。当我必须编写10行或更多行查询时,活动记录看起来需要做很多额外的工作。我已经尝试在它中使用pdo,但它不起作用。我习惯于使用:而不是其他类型。在您提供的示例中,我仍然需要对get和posts进行转义、修剪以及其他任何必要的操作。ActiveRecord将在所有字段周围加上记号,输入类将使用XSS过滤器,您所要做的就是修剪()。对我来说,工作似乎少了很多;)。新的是可怕的,但值得在这里付出努力。新的是可怕的只是额外的东西要学习,希望到时候我会习惯的,谢谢你的投入。顺便说一句,我的朋友刚刚创建了一个类似于CI的mvc,他使用pdo的方式与我在问题中描述的相同。你认为从长远来看它会引起问题吗?我不这么认为。它们都只是让你的生活更轻松的工具。无论哪一个让你最有效率,都去做吧。事实上,我发现ActiveRecord是CI最好的东西之一。你会惊讶于生产力的提高。而且,您总是可以回退到手工编写复杂的查询。也就是说,找到一种方法将PDO加载为CI库包装器或CI中任何地方都可以访问的东西,然后继续您的生活;)