Мне нужно выполнить непрерывный синтаксический анализ нескольких потоков внешних точечных томов, вставить соответствующие поля в mysql db и регулярные запросы из db. Все это находится в защищенной среде - то есть я не имею дело с веб-формами или пользовательскими вводамиPDO Active Record подготовленный оператор в отдельных классах
Поскольку я реализую ряд вставок в + запросы из разных таблиц, я решил настроить PDO модель активной записи - в соответствии с рекомендациями Николаса Хуот и многих спонсоров 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));
}
// класс таблицы также включает в себя функцию, которая возвращает buildQuery $ SQL строку - испытано о'кеы
=======
Контроллер:
$dbo = database::getInstance();
$movements = new trainmovts();
$stmt = $movements->storeprep(); // set up prepared query
После этих начальных стадий, контроллер проходит через непрерывный цикл, выбирает поля, необходимые для хранения в массиве параметра $ Exec, затем вызывает $ movements-> storexecute ($ Exec);
Моя непосредственная проблема в том, что я получаю сообщение об ошибке «Catchable фатальная ошибка: Объект базы данных класса не может быть преобразован в строку» в функции prepquery Database (который называется в таблице storeprep Fn)
Can кто-нибудь советует по этой непосредственной проблеме, должны ли последующие повторные выполнения работать таким образом, и более широко следует изменить что-либо со структурой?
[This] (http://stackoverflow.com/a/11369679/727208) должен объяснить, как вы можете совместно использовать один экземпляр PDO между несколькими объектами. –