Php 为什么DBAL返回SQL语法错误?
我在使用条令2和CodeIgniter 我的一些函数中有一个查询触发了SQL错误。我找不到原因 功能如下:Php 为什么DBAL返回SQL语法错误?,php,sql,codeigniter,symfony,doctrine-orm,Php,Sql,Codeigniter,Symfony,Doctrine Orm,我在使用条令2和CodeIgniter 我的一些函数中有一个查询触发了SQL错误。我找不到原因 功能如下: private function _key_exists($key) { $this->CI->load->library('doctrine'); $em = $this->CI->doctrine->em; echo "<br />Key : ".$key; $ke
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;
}
private function\u key\u存在($key)
{
$this->CI->load->library(“条令”);
$em=$this->CI->doctrine->em;
echo“
键:.$Key;
$key_object=$em->getRepository('Entity\key')->findOneBy(数组('key'=>$key));
if($key\u对象)
{
返回TRUE;
}
其他的
{
返回FALSE;
}
//返回$this->db->where(配置项('rest\u key\u column'),$key)->计数所有结果(配置项('rest\u key\u 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 ... */
}
此特定查询失败的原因是“key”在mysql中是一个保留字
从键t0开始,其中t0.key=?限制1'
所以我猜在你改变你的orm之前你没有让它工作
将属性重命名为类似值的值$key->value的读取效果无论如何都比$key->key好。引用表和列名需要在定义中明确使用记号,例如:
/**
* @ORM\Column(name="`key`", type="string", length=255, nullable=false)
*/
protected $key;
您确定粘贴了正确的sql代码吗?您的用户实体是否存储在一个名为keys的表中?正如我在前面的评论中所提到的,如果您需要共享条令实体,那么请切换到yaml,它绕过了整个orm问题。我已经使用D2大约4年了(alpha版本),它非常稳定。谢谢你,你完全正确,这不是导致这个问题的语法,让我马上更新这个问题。非常感谢您指出:)所以我的理解是,它在某种程度上寻找一个键t0表(在SQL中“keys t0”附近,其中t0.key=”紧跟在FROM之后),而表是键对的?