0

我在将值与 PDO 和 PHP 绑定时遇到了一些问题。当我用变量替换值时,脚本会返回正确的结果,但由于某种原因,我无法让它工作。

// Connect to database in function on different page
function db1() {
    try {
        $pdo = new PDO("mysql:host=localhost;dbname=**********", '**********', '**********');
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
        return $pdo;
        $pdo = null;
    } catch (PDOException $e) {
        die($e->getMessage());
    }
}

// Scrit with problems
$db = db1();
$query = $db->prepare("SELECT column1, column2, column3, column4 FROM table_name WHERE (column4=2 OR column4=3) AND column5=:col1 AND column6=:col2"); // Prepare the statement to prevent any SQL injection
    $query->bindValue(':col1', $var1, PDO::PARAM_INT);
    $query->bindValue(':col2', $var2, PDO::PARAM_STR);
    $query->execute();
// I also tried the following.
// $query->execute(array(':col1' => $var1, ':col2' => $var2));

// Fetch result row
$row = $query->fetch(PDO::FETCH_ASSOC);

有任何想法吗?


UPDATE 查询前后是否有 var_dump。var1 = string(1) "2" 和 var2 = string(1) "1"

删除 $pdo = null;

4

1 回答 1

0

除了$pdo = null在 a 之后return因此从未执行的行,以及$db = $db1()函数用作变量的地方,代码没有任何明显错误。既然你说用变量替换绑定是有效的,我认为最后一个是错字。

所以我建议你尝试一下脚本中那个点的和var_dump的值是什么。$var1$var2

更新

我已经复制了这样的设置

<?php

    $db = new PDO("mysql:host=localhost;dbname=test");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $var1 = 1; // See answer text below
    $var2 = 2;

    $query = $db->prepare("SELECT * FROM test WHERE column5=:col1 AND column6=:col2");
    $query->bindValue(':col1', $var1, PDO::PARAM_INT);
    $query->bindValue(':col2', $var2, PDO::PARAM_STR);
    $query->execute();
    $row = $query->fetch(PDO::FETCH_ASSOC);
    print_r($row);
?>

然后我创建了这样的第一个表

CREATE TABLE test ( column5 INTEGER, column6 INTEGER );

然后像这样

CREATE TABLE test ( column5 varchar(5), column6 varchar(5) );

我尝试将$var1and定义$var2为 1,2(整数)和“1”,“2”(字符串)。

它总是有效的,即我希望得到一行作为输出,我做到了:

Array
(
   [column5] => 1
   [column6] => 2
)

在这一点上,我认为唯一的可能是数据库内容中出现了一些奇怪的东西

因此,我还希望下面的测试在您的系统上不起作用,即不返回所需的行:

$query = $db->prepare("SELECT column1, column2, column3, column4 FROM table_name WHERE (column4=2 OR column4=3) AND column5=2 AND column6='1'");
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
var_dump($row);
于 2012-10-11T18:09:31.577 回答