我目前的模型结构如下:
/**
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="related_type", type="string")
* @ORM\DiscriminatorMap({"type_one"="TypeOne", "type_two"="TypeTwo"})
*/
abstract class BaseEntity {
... (all the usual stuff, IDs, etc)
/**
* @ORM\OneToMany(targetEntity="Comment", mappedBy="baseEntity")
*/
private $comments;
}
/**
* @ORM\Entity
*/
class TypeOne extends BaseEntity {
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\Column(type="string")
*/
private $description;
}
/**
* @ORM\Entity
*/
class TypeTwo extends BaseEntity {
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\Column(type="string")
*/
private $description;
}
/**
* @ORM\Entity
*/ …Run Code Online (Sandbox Code Playgroud) 我一直在转换一个应用程序使用PDO准备语句而不是mysqli,我遇到了一个奇怪的问题.我在数据库中有一些记录,预计字段将为null.不是'null'(字符串),或''(空字符串),而是NULL.我动态地构建我的查询,所以在过去当我在对象中遇到一个null变量时,我会像这样构建查询:
WHERE fieldName is null;
Run Code Online (Sandbox Code Playgroud)
当字段为空时,将获得预期的结果.
现在使用PDO,我的查询没有返回任何结果,我没有收到任何错误.它只是没有返回我期望的记录.当我回显构建的查询并直接在MySQL中运行它时,我得到了预期的结果,但在应用程序中没有返回结果.
我尝试过的一些事情包括构建如下所示的查询:
WHERE fieldName is null;
Run Code Online (Sandbox Code Playgroud)
要么
WHERE fieldName <=> null;
Run Code Online (Sandbox Code Playgroud)
我也尝试过标准的准备声明:
WHERE fieldName = :fieldName
Run Code Online (Sandbox Code Playgroud)
然后绑定这些语句:
$stmt->bindParam(":$field", $value);
$stmt->bindParam(":$field", $value, PDO::PARAM_NULL);
$stmt->bindParam(":$field", null, PDO::PARAM_NULL);
$stmt->bindValue(":$field", null, PDO::PARAM_NULL);
$stmt->bindValue(":$field", null, PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)
任何有关这方面的帮助将不胜感激.我的PHP版本是5.3.10,MySQL是5.5.22.作为一个附带问题,我仍然不清楚bindParam和bindValue之间的区别,所以如果在你的答案中包含它是有意义的,我会非常感谢对这个主题的一些澄清......