【发布时间】:2013-08-28 02:16:34
【问题描述】:
我正在使用 Doctrine 2 和 CodeIgniter。
我的某些函数中有一个查询会触发 SQL 错误。而且我找不到原因
函数如下:
private function _key_exists($key)
{
$this->CI->load->library('doctrine');
$em = $this->CI->doctrine->em;
echo "<br />Key : ".$key;
$key_object = $em->getRepository( 'Entity\Key' )->findOneBy( array( 'key' => $key ) );
if( $key_object )
{
return TRUE;
}
else
{
return FALSE;
}
// return $this->db->where(config_item('rest_key_column'), $key)->count_all_results(config_item('rest_keys_table')) > 0;
}
当关键实体是:
<?php
namespace Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Keys
*
* @ORM\Table(name="keys")
* @ORM\Entity
*/
class Key
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="key", type="string", length=40, precision=0, scale=0, nullable=false, unique=false)
*/
private $key;
/**
* @var integer
*
* @ORM\Column(name="level", type="integer", precision=0, scale=0, nullable=false, unique=false)
*/
private $level;
/**
* @var boolean
*
* @ORM\Column(name="ignore_limits", type="boolean", precision=0, scale=0, nullable=false, unique=false)
*/
private $ignoreLimits;
/**
* @var boolean
*
* @ORM\Column(name="is_private_key", type="boolean", precision=0, scale=0, nullable=false, unique=false)
*/
private $isPrivateKey;
/**
* @var string
*
* @ORM\Column(name="ip_addresses", type="text", precision=0, scale=0, nullable=true, unique=false)
*/
private $ipAddresses;
/**
* @var integer
*
* @ORM\Column(name="date_created", type="integer", precision=0, scale=0, nullable=false, unique=false)
*/
private $dateCreated;
/* Getters and Setters ... */
}
错误信息是:
Doctrine\DBAL\DBALException: 执行时发生异常 'SELECT t0.id AS id1, t0.key AS key2, t0.level AS level3, t0.ignore_limits AS ignore_limits4, t0.is_private_key AS is_private_key5, t0.ip_addresses AS ip_addresses6, t0.date_created AS date_created7 FROM keys t0 WHERE t0.key = ? LIMIT 1' 带参数 {“1”:“0fedfa4d50653317df76a4dba79f9f07cd7a8273”}:SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 中有错误 句法;检查与您的 MySQL 服务器版本相对应的手册 在 'keys t0 WHERE t0.key = 附近使用正确的语法 '0fedfa4d50653317df76a4dba79f9f07cd7a8273' LIMIT 1' 在第 1 行 E:\Programmes\wamp\www\myapp\application\libraries\Doctrine\DBAL\DBALException.php 在第 47 行
我确实在输出中看到:Key : c242c67787bd0b9a9b11a54fc942fde50f099235
非常感谢您的帮助
【问题讨论】:
-
你确定你粘贴了正确的sql代码吗?您的用户实体是否存储在名为键的表中?
-
正如我在之前的评论中提到的,如果您需要共享学说实体,请切换到绕过整个 orm 问题的 yaml。我已经使用 D2 大约 4 年了(alpha 版本),它非常稳定。
-
谢谢你,你完全正确,这不是导致这个问题的语法,让我稍后更新问题。非常感谢您指出这一点:)
-
所以我的理解是,当表是键时,它正在以某种方式寻找一个键 t0 表('keys t0 WHERE t0.key =' 就在 SQL 中的 FROM 之后)?跨度>
标签: php sql codeigniter symfony doctrine-orm