我正在使用Codeigniter 4和Oracle。在我的控制器中,我有以下代码:
<?php
namespace App\Controllers;
class Home extends BaseController
{
public function index()
{
$this->db = \Config\Database::connect();
$query = "select * from test";
$this->db->_prepare($query);
$this->db->_execute();
echo "<table border='1'>\n";
$ncols =$this->db->getFieldCount();
echo "<tr>\n";
for ($i = 1; $i <= $ncols; ++$i) {
$colname = $this->db->getFieldNames($s, $i);
echo " <th><b>".htmlspecialchars($colname,ENT_QUOTES|ENT_SUBSTITUTE)."</b></th>\n";
}
echo "</tr>\n";
while (($row = $this->db->fetchAssoc()) != false) {
echo "<tr>\n";
foreach ($row as $item) {
echo "<td>";
echo $item!==null?htmlspecialchars($item, ENT_QUOTES|ENT_SUBSTITUTE):" ";
echo "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
}
}
此代码返回错误:第一个月
方法CodeIgniter\数据库\OCI8\连接正在返回oci_connect结果
我该怎么做呢?
1条答案
按热度按时间gopyfrb31#
错误:
解释:
上面的错误很明显,你试图调用
_prepare(...)
方法,而这个方法在CodeIgniter\Database\OCI8\Connection
类中并不存在。溶液:
准备查询
使用
prepare()
方法可以轻松地完成此操作。此方法只需要一个参数,即返回查询对象的闭包。查询对象由任何 "final" 类型的查询自动生成,包括insert、update、delete、replace、和get。使用查询生成器运行查询是处理此操作最简单的方法。查询并不实际运行。值并不重要,因为它们从来没有被应用过,而是作为占位符。这将返回一个PreparedQuery
对象:如果不想使用查询生成器,可以手动创建Query对象,并使用问号表示值占位符:
执行查询
准备好查询后,可以使用
execute()
方法实际运行查询。可以在查询参数中传递所需数量的变量。传递的参数数量必须与查询中占位符的数量匹配。传递参数的顺序还必须与原始查询中占位符的顺序相同:获取字段计数()
查询返回的FIELDS(列)数。请确保使用查询结果对象调用该方法:
获取字段名称()
返回一个数组,其中包含查询返回的字段(列)的名称。请确保使用查询结果对象调用该方法: