标签: dbal

DBAL Symfony 2 SQL语句

我目前正在使用symfony和DBAL从外部数据库收集数据.

        $conn = $this->get('database_connection');

        $users = $conn->fetchAll('SELECT * FROM cms_clients');

        print_r($users);
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但我需要做更复杂的查询,我能找到的唯一文档是http://doctrine-dbal.readthedocs.org/en/latest/reference/query-builder.html

文档非常好,但我不确定如何在我的示例中实现代码.

$queryBuilder ->select('u.id', 'u.name') ->from('users', 'u') ->where('u.email = ?') ->setParameter(0, $userInputEmail) ;

解决方案,无论如何都要感谢重播

      $conn = $this->get('database_connection');
Run Code Online (Sandbox Code Playgroud)
        $parms = array($DataSource, 'STORE');

        $query = "SELECT * FROM cms_things LEFT JOIN cms_stores ON cms_things.id=cms_stores.thing_id WHERE client_id = ? AND type = ? ";

        $users = $conn->fetchAll($query, $parms);
Run Code Online (Sandbox Code Playgroud)

php symfony dbal

5
推荐指数
1
解决办法
1047
查看次数

在简单的PDO上,Doctrine的数据库抽象层提供了什么?

如果我在简单的PDO上使用Doctrine的数据库抽象层(DBAL),会得到什么?

PDO本身不应该是抽象层吗?据我所知,我获得的唯一好处是能够将Oracle的oci8驱动程序与类似PDO的API一起使用。

我想念什么?

php pdo database-abstraction doctrine dbal

5
推荐指数
1
解决办法
1011
查看次数

在Symfony中使用Doctrine的DBAL检索布尔值

我在Symfony项目中使用DBAL访问Mysql数据库中的数据。当查询具有布尔字段(创建为tinyint)的表时,我在PHP中获得了tinyint值,但我想获取布尔值。

不知何故,我想获得与直接使用Doctrine相同的映射。

我以为映射转换(从mysql到php)已经在DBAL中实现,但是我不确定是否应该以这种方式工作(该层映射返回值)。

我尝试注册类似于以下内容的自定义映射,但未成功:

    $this->conn->getDatabasePlatform()->registerDoctrineTypeMapping('tinyint', 'boolean'); 

    $sql = "
    SELECT se.survey_id, se.anonymous
      FROM survey_edition se
    ";
    $stmt = $this->conn->prepare($sql);
    $stmt->execute();

    $result = $stmt->fetch();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,“匿名”是Mysql中的tinyint(1)字段,但是我希望$ result ['anonymous']是布尔值而不是整数。

您是否知道可以通过Doctrine的DBAL从Mysql查询中获取PHP中的布尔值?

谢谢。

php mysql doctrine symfony dbal

5
推荐指数
1
解决办法
1047
查看次数

执行多个查询时的Doctrine(DBAL)错误处理

我有一个架构sql文件(语法错误),包括设置数据库的多个查询

example.sql

CREATE TABLE IF NOT EXISTS `example` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


CREATExxxxxxxxxx TABLE IF NOT EXISTS `example2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
Run Code Online (Sandbox Code Playgroud)

使用example.php

$sqlContent = file_get_contents("example.sql");
$stmt = $conn->prepare($sqlContent);
$result = $stmt->execute();
Run Code Online (Sandbox Code Playgroud)

即使我的sql不正确,execute方法也不会抛出任何异常.它的文档说它false在失败时返回,但它返回true.

我该如何处理异常处理?如何检查我的查询是否有错误?

php sql pdo doctrine dbal

5
推荐指数
1
解决办法
1019
查看次数

DBAL基数违规错误

我收到以下SQL的"基数违规"错误:

Doctrine\DBAL\Exception\DriverException:执行时发生异常

SELECT p.* FROM mod_products_products p 
LEFT JOIN mod_products_products_categories c_link ON c_link.product_id = p.id 
LEFT JOIN mod_products_brands b ON p.brand_id = b.id 
LEFT JOIN mod_products_groups vg ON p.variation_id = vg.id 
LEFT JOIN mod_products_categories c ON c_link.category_id = c.id 
LEFT JOIN mod_products_group_options vg_o ON vg_o.group_id = vg.id 
LEFT JOIN mod_products_group_values vg_o_v ON vg_o_v.option_id = vg_o.id 
WHERE (p.name LIKE (?, ?)) AND (p.parent_id = 0) AND (vg_o.disabled=0) 
GROUP BY p.id ORDER BY p.name ASC 
LIMIT 18446744073709551615 OFFSET 0
Run Code Online (Sandbox Code Playgroud)

with params ["%big%","%light%"]:SQLSTATE …

php mysql sql doctrine-orm dbal

5
推荐指数
1
解决办法
341
查看次数

在Symfony app/console中启用Doctrine DBAL命令

当使用裸机Doctrine和开箱即用的命令行时,有两个命令可用,使用Doctrine和Symfony时似乎不可用,并且app/console:

dbal
  dbal:import    Import SQL file(s) directly to Database.
  dbal:run-sql   Executes arbitrary SQL directly from the command line.
Run Code Online (Sandbox Code Playgroud)

有没有办法在Symfony中启用这些命令app/console

configuration symfony doctrine-orm dbal

4
推荐指数
2
解决办法
2199
查看次数

与 PHP PDO 相比,Doctrine DBAL 中的错误处理

使用 PDO 我们有\PDO::ATTR_ERRMODE,并且将其设置为\PDO::ERRMODE_EXCEPTION我们能够获得详细的异常堆栈跟踪 ( getTrace)。

DBAL 怎么样?如何在 DBAL 级别设置它如何抛出错误?

DBAL 是 PDO 实例的包装器,与 DBAL 的大多数 PDO 方法工作相同,是否还有ATTR_ERRMODE其他类似的报告控制方法?

我想用它set_error_handler来更好地控制错误的行为方式和ERRMODE_EXCEPTION级别,它非常有用。

在 PDO 中:

<?php
$dsn = 'mysql:host='.$_SESSION['options']['host'].';port='.$_SESSION['options']['port'].';dbname='.$_SESSION['options']['dbname'].';charset='.$_SESSION['options']['charset'];
try {
    $conn = new \PDO($dsn, $_SESSION['options']['user'], $_SESSION['options']['pass']);
    $conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); // how to set this line in DBAL?
} catch (\PDOException $e) {
    trigger_error($e->getMessage(), E_USER_ERROR);
}
?>
Run Code Online (Sandbox Code Playgroud)

在 DBAL 中也是如此:

<?php
require_once "lib/autoload.php";
$config = new \Doctrine\DBAL\Configuration();
$params = array(
    'dbname' => $_SESSION['options']['dbname'],
    'user' …
Run Code Online (Sandbox Code Playgroud)

php pdo exception-handling doctrine-orm dbal

4
推荐指数
1
解决办法
2375
查看次数

Symfony:如何在Doctrine DBAL配置(YAML)中设置SSL参数?

我想将我的SSL证书和密钥文件添加到Doctrine DBAL配置中,但我不知道如何实现这一点.

在PHP中,我只需要编写类似于:

$databaseHandler = new \PDO(
    'mysql:host=my_host;dbname=my_db',
    'username',
    'password',
    array(
        \PDO::MYSQL_ATTR_SSL_KEY   => '.../client-key.pem',
        \PDO::MYSQL_ATTR_SSL_CERT  => '.../client-cert.pem',
        \PDO::MYSQL_ATTR_SSL_CA    => '.../ca-cert.pem'
    )
);
Run Code Online (Sandbox Code Playgroud)

我知道有一个自定义驱动程序选项 driverOptions,我看到了这个答案,但我不确定如何将其转换为YAML.

我觉得我应该写一些接近的东西:

doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        driverOptions:
            PDO::MYSQL_ATTR_SSL_CA: '.../client-key.pem'
            PDO::MYSQL_ATTR_SSL_CERT: '.../client-cert.pem'
            PDO::MYSQL_ATTR_SSL_CA: '.../ca-cert.pem'
Run Code Online (Sandbox Code Playgroud)

但双冒号不会真的取悦YAML ......

pdo yaml symfony doctrine-orm dbal

4
推荐指数
2
解决办法
4817
查看次数

使用 Doctrine DBAL 一次删除多行,是否可能?

首先,我只想提一下,这根本不是一个“问题”。使用 Doctrine DBAL 删除不是问题,我能够做到。

我真正想知道的是是否有办法一次删除多行而不必循环,例如数组。

对于我的项目,我使用SilexDoctrine DBAL

这是我目前如何做的一个例子:

$toDelete = array(1,2,3,4);

foreach($toDelete as $id){
   $this->app['db']->delete('table_name',array('id' => $id ));
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以避免循环吗?

php doctrine-orm dbal silex

4
推荐指数
1
解决办法
9302
查看次数

在dbal上限制sql结果

我在Symfony2上使用dbal从我的表中检索一些信息:

$social = $conn->fetchAll('SELECT * FROM page WHERE  brand_id = :brand LIMIT :start,:limit', array('brand'=>$brand, 'start'=>(int) $start, 'limit'=>(int) $limit));
Run Code Online (Sandbox Code Playgroud)

我只是在添加最后一部分(LIMIT ....)时才收到错误,这让我觉得我不能在sql查询中限制结果但在外面使用某种命令.我怎么解决这个问题?

错误:

An exception occurred while executing 'SELECT * FROM page WHERE brand_id = :brand LIMIT :start,:limit' with params {"brand":1,"start":0,"limit":4}:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0','4'' at line 1
Run Code Online (Sandbox Code Playgroud)

php sql doctrine dbal

3
推荐指数
1
解决办法
2575
查看次数