2014-11-02 71 views
-1

我尝试从数据库中选择数据,但是当我在WHERE之后有两个参数时我无法获取它。该工程如何在使用PDO的WHERE之后使用两个参数进行选择?

代码:

$conn = null; 
$host = 'localhost'; 
$db = 'database'; 
$user = 'root'; 
$pwd = 'root'; 

$auth = 'EP'; 
$nr = 2007; 

try { 
    $conn = new \PDO('mysql:host='.$host.';dbname='.$db, $user, $pwd);  
    $stmt = $conn->prepare('SELECT family FROM table WHERE nr = :nr'); 
    $stmt->execute(array('nr' => $nr)); 

    while($row = $stmt->fetch(PDO :: FETCH_ASSOC)) { 
     echo '<pre>'; 
     print_r($row); 
     echo '</pre>'; 
    } 
} 
catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 

但是当我使用以下选择它不起作用:

SELECT family FROM table WHERE auth = :auth AND nr = :nr 

我认为这是在该行的一个问题

$stmt->execute(array('nr' => $nr)); 

当我做了以下我没有在屏幕上的结果:

$stmt->execute(array('nr' => $nr, 'auth' => $auth)); 

有没有人知道我做错了什么?

非常感谢提前!

+0

你得到任何错误?也许你没有任何与'nr'和'auth'相匹配的行,也检查查询。 – 2014-11-02 16:05:47

+0

Olá@MarcioSimao没有任何错误!!! 奇怪的是,当我写o nly: $ stmt = $ conn-> prepare('SELECT * FROM publn_data WHERE publn_nr =:publn_nr'); (数组(':publn_nr'=> $ publnNr)); 它的工作原理... Algumaidéia? – 2014-11-02 16:28:01

+0

Opa!直接在数据库中搜索,你会得到任何结果?你使用的是本地还是远程服务器? – 2014-11-02 16:33:19

回答

1

改变这种

stmt->execute(array('nr' => $nr, 'auth' => $auth)); 

TO

$stmt->execute(array(':nr' => $nr, ':auth' => $auth)); 

:是一个小错字的错误,但PDO严重:(和参数将是空的。

+0

这是不正确的 - 如果内部缺失,冒号将被添加到参数中(https://github.com/php/php-src/blob/PHP-5.5/ext/pdo/pdo_stmt.c#L363) – dave 2014-11-02 14:34:39

+0

@但是如果我没有添加冒号PHP引发错误:(为什么会是这样? – 2014-11-02 14:37:27

+0

嘿@AncientGeek,我跟着你,但屏幕上仍然没有数组。只有当我使用$ nr时... Select在phpmysql中工作得很好... – 2014-11-02 16:30:08

相关问题