Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么DBAL返回SQL语法错误?_Php_Sql_Codeigniter_Symfony_Doctrine Orm - Fatal编程技术网

Php 为什么DBAL返回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

我在使用条令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;
    }
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之后),而表是键对的?