ошибка, когда я использую md5 на php, кто-то поможет, пожалуйста, [дублировать]

Если мы рассмотрим общие сценарии, в которых может быть выбрано это исключение, доступ к свойствам с объектом вверху.

Пример:

string postalcode=Customer.Address.PostalCode; 
//if customer or address is null , this will through exeption

здесь, если адрес имеет значение null, то вы получите NullReferenceException.

Итак, в качестве практики мы всегда должны использовать проверку нуля, прежде чем обращаться к свойствам в таких объектах (особенно в общих)

string postalcode=Customer?.Address?.PostalCode;
//if customer or address is null , this will return null, without through a exception
8
задан Drew 21 July 2011 в 04:06
поделиться

4 ответа

Второй параметр bindParam является ссылкой . Поскольку возврату функции нельзя ссылаться, она не может строго соответствовать потребностям параметра bindParam (PHP будет работать с вами, хотя и будет выдавать предупреждение здесь).

Чтобы получить лучшую идею, вот и Пример: этот код даст те же результаты, что и ваш второй пример:

$stmt = $dbh->prepare("SELECT thing FROM table WHERE color = :color");
$tempColor = NULL; // assigned here
$stmt->bindParam(':color',$tempColor);
$tempColor = $someClass->getColor(); // but reassigned here
$stmt->execute();

Это невозможно при возврате функции.

6
ответ дан cwallenpoole 26 August 2018 в 14:14
поделиться

Если вы действительно хотите привязать значение вместо ссылки, вы можете использовать PDOStatement :: bindValue , а затем код будет выглядеть примерно так:

$stmt = $dbh->prepare("SELECT thing FROM table WHERE color = :color");
$stmt->bindValue('color', $someObject->getColor());
$stmt->execute();
-1
ответ дан Jefferson Lima 26 August 2018 в 14:14
поделиться

Если вы хотите избежать назначения значения переменной, вам может быть лучше попробовать:

$stmt = $dbh->prepare("SELECT thing FROM table WHERE color = ?");
$stmt->execute(array($someClass->getColor()));

Как уже упоминалось, ошибка вызвана тем, что PDO :: statement- > bindParam ожидает, что param 2 будет переменной, переданной по ссылке.

2
ответ дан shxfee 26 August 2018 в 14:14
поделиться

В описании PDOStatement::bindParam() указано, что он связывает переменную PHP с quesitonmark или с именем placeholder. Поскольку вы пытаетесь передать метод класса (даже если этот метод возвращает значение), он все равно не является именем переменной, поэтому это предупреждение. Возможно, вы захотите посмотреть PDOStatement::bindValue() на будущий код вашего кода.

9
ответ дан Tarek Fadel 26 August 2018 в 14:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: