Переменная базы данных SugarCRM не позволяет мне вызывать функцию quote () из моего собственного свойства

Я строю модуль SugarCRm. Он использует старые основные функции MySQL, как PHP4 дней …

Большинство модулей в системе обращаются к классу-оболочке базы данных, вызывая эту глобальную переменную и затем используя ее.

global $db;

$db->quote($some_SQL_Query_To_Execute);

Теперь я не большой поклонник этого, поэтому в моих собственных классах Module в моем методе Constructor я делаю это …

class MyModuleClassHereForSODemo
{

public $db;

public function __cnstructor($id){

$this->db = DBManagerFactory::getInstance();

}public function insertDBRecordFunctionHERE($id){

$sql = "INSERT INTO `db_table_name` (
`topic_id`,
`project_id`,
`topic_subject`,
`topic_content`,
`date_created`,
`date_last_post`,
`created_by_user_id`,
`last_post_user_id`,
`posts_replies`
) VALUES(
NULL,
'$this->db->quote($project_id)',
'$this->db->quote($topic_subject)',
'$this->db->quote($topic_content)',
UTC_TIMESTAMP(),
UTC_TIMESTAMP(),
'$this->db->quote($created_by_user_id)',
'$this->db->quote($created_by_user_id)',
'0');";

$this->db->query($sql);

}}

Теперь вот проблема у меня, этот запрос SQL выше не будет работать, потому что я звоню $this->db->quote() на мои переменные … теперь, что очень странно и разочаровывает, если я вместо этого использую переменную GLOBAL $ db, то я могу запустить это вместо $db->quote() и это работает весь день … это, как только я запускаю quote() метод в моих собственных свойствах $ db классов, что он ломает все.

Может ли это быть из-за того, что система рассматривает их как различные соединения с БД, даже если она синглтонна и должна представлять собой одну и ту же переменную и объект, которые я представляю … какие-то идеи?

Также у меня нет всего кода для класса DB, к которому я обращаюсь, но я знаю, что quote метод просто вызывает mysql_real_escape_string

1

Решение

Довольно поздно на вечеринку здесь, но проблема не в том, что у вас есть местный $db переменная. Дело в том, что синтаксический анализ строки не подхватит использование функций в вашей строке. Вместо этого вы должны использовать сложный синтаксис.

То есть

$string = "This is a string with a function call'{$this->db->quote($project_id)}'";

Увидеть https://php.net/manual/en/language.types.string.php#language.types.string.parsing

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]