Литература bindParam через закрытую переменную-член класса

Я создаю класс под названием User только с закрытыми переменными-членами и функциями получения / установки

class User {
private $m_id;
private $m_firstname;
private $m_lastname;

public function get_firstname() { return $this->m_firstnmae; }
public function set_firstname($firstname) { $this->m_firstname = $firstname; }
...
}

так print_r($user)дал бы мне что-то вроде этого:

User Object
(
[m_id:User:private] => 2725
[m_firstname:User:private] => Alan
[m_lastname:User:private] => Turing
)

Теперь я использую PDO для вставки объекта в базу данных (я пропущу часть соединения, поскольку она работает, а не является частью проблемы). Вот моя функция для вставки данных:

function insert($user)
{
$insert_query = "insert into table (id,firstname,lastname) values (:id, :firstname, :lastname)";
try
{
$stmt = $this->m_pdo->prepare($insert_query);
$stmt->bindParam(':id', $user->get_id());
$stmt->bindParam(':firstname', $user->get_firstname());
$stmt->bindParam(':lastname', $user->get_lastname());

$stmt->execute();
return true;
}
catch (PDOException $ex)
{
echo $this->m_error_message = $ex->getMessage();
return false;
}
}

работает так же. ОДНАКО, когда я изменяю php error_reporting на E_ALL | E_STRICT, которые также показывают строгое предупреждение во время выполнения, код вставки создает предупреждение strict standards only variables should be passed by reference для bindParam линий. Спросив Google, я обнаружил, что, очевидно, я должен сделать это в 2 шага:

$id = $user->get_id()
$stmt->bindParam(':id', $id);

После преобразования их в новый формат все работает без предупреждения.

Дело в том, мой оригинал User-class намного больше с более чем 20 закрытыми переменными-членами, и у меня есть и другие классы, как это. Так что я думал перебрать переменные и сохранить их в массиве и bindParam их как массив. Но тогда я сталкиваюсь с проблемой foreach только перебирайте открытые переменные, но не закрытые … Итак, мои вопросы:

  1. можно ли совместить bindParam с петлей как-нибудь?
  2. если это так, как я могу перебрать закрытые переменные-члены и сохранить их?

для удобства я везде использую один и тот же формат имен. т.е. столбец в базе данных с firstname будет иметь коллегу m_firstname в User-class с get_firstname() а также set_firstname($firstname) как получатель / установщик

1

Решение

Я думаю, что вы должны использовать
public bool PDOStatement::bindValue ( mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] )
Вместо bindParam () и держи добытчиков 🙂

перешел от комментария к ответу

1

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

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

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