我需要对几个外部 stomp 数据流进行连续解析,将相关字段插入到 MySql 数据库中,以及来自数据库的常规查询。所有这一切都在受保护的环境中 - 即我不处理 Web 表单或用户输入
因为我正在从不同的表中实现一系列插入 + 查询,所以我决定建立一个 PDO 活动记录模型 - 遵循 Nicholas Huot 和许多 SO 贡献者的建议。
我有一个简单的重复插入工作正常,但经过几天的悲伤无法让准备好的插入飞行。我想使用准备好的插入,因为其中会有很多(即为了性能)。
代码的相关位是:
========= 数据库类:
private function __construct()
{
try {
// Some extra bad whitespace removed around =
$this->dbo = new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME, DBUSER, DBPSW, $options);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}
public static function getInstance()
{
if(!self::$instance)
{
self::$instance = new self();
}
return self::$instance;
}
public function prepQuery($sql) // prepared statements
{
try {
$dbo = database::getInstance();
$stmt = new PDOStatement();
$dbo->stmt = $this->$dbo->prepare($sql);
var_dump($dbo);
}
catch (PDOException $e) {
echo "PDO prepare failed : ".$e->getMessage();
}
}
public function execQuery($sql) // nb uses PDO execute
{
try {
$this->results = $this->dbo->execute($sql);
}
catch (PDOException $e) {
echo "PDO prepared Execute failed : \n";
var_dump(PDOException);
}
}
========= 表类:
function storeprep() // prepares write to db. NB prep returns PDOstatement
{
$dbo = database::getInstance();
$sql = $this->buildQuery('storeprep');
$dbo->prepQuery($sql);
return $sql;
}
function storexecute($paramstring) // finalises write to db :
{
echo "\nExecuting with string : " . $paramstring . "\n";
$dbo = database::getInstance(); // Second getInstance needed ?
$dbo->execQuery(array($paramstring));
}
//table 类还包括 buildQuery 函数,它返回 $sql 字符串 - 测试正常
=======
控制器 :
$dbo = database::getInstance();
$movements = new trainmovts();
$stmt = $movements->storeprep(); // set up prepared query
在这些初始步骤之后,Controller 会运行一个连续循环,将存储所需的字段选择到参数数组 $exec 中,然后调用 $movements->storexecute($exec);
我的直接问题是在数据库预查询函数(由 Table storeprep fn 调用)中收到错误消息“可捕获的致命错误:类数据库的对象无法转换为字符串”
任何人都可以就这个直接问题提出建议,后续重复执行是否应该以这种方式工作,更广泛地说,我应该改变结构的任何内容吗?