绑定参数值

Binded parameter value

我有一个查询,我想获得该查询的完整语句,即:

$ids = 1;
$query = $db->prepare('SELECT name FROM fruits WHERE ids = :ids');

$query->bindParam(':ids', $ids, PDO::PARAM_INT);
$query-execute();

# Runs the query:
SELECT name FROM fruits WHERE ids = 1

我希望获得上述查询,而不是:

SELECT name FROM fruits WHERE ids = :ids

因为我遇到了这个查询的问题,没有返回正确的值。

由于上面的table有很大的价值,我用我刚刚创建的另一个table进行了测试:

CREATE TABLE IF NOT EXISTS `news` (
`idn` int(5) unsigned NOT NULL AUTO_INCREMENT,
`news_title` varchar(150) NOT NULL,
`news_desc` longtext NOT NULL,
`user_id` int(5) NOT NULL DEFAULT '1' COMMENT 'who added the news',
`randkey` varchar(30) NOT NULL,
`person_ip` varchar(30) NOT NULL,
`when` varchar(30) NOT NULL COMMENT 'when was added',
`on_off` enum('0','1') NOT NULL DEFAULT '0' COMMENT '0: on, 1: off',
PRIMARY KEY (`idn`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `news`
--

INSERT INTO `news` (`idn`, `news_title`, `news_desc`, `user_id`, `randkey`, `person_ip`, `when`, `on_off`) VALUES
(1, 'title', 'desc here', 1, '', '', '645167451764', '0'),
(2, 'news title', 'news description', 1, '', '', '14335983795639', '0');

代码是:

$OnOff = 1;

$statement = $connexion->prepare("SELECT * FROM news WHERE on_off = :on_off");
$statement->bindParam(':on_off', $OnOff, PDO::PARAM_INT);
$statement->execute();

$row = $statement->fetchAll();

$rowCount = $statement->rowCount();


if($rowCount){

foreach($row as $varr=>$arr)
{
    $idn                    = $arr['idn'];
    $news_title         = $arr['news_title'];
    $news_desc      = $arr['news_desc'];
    $user_id        = $arr['user_id'];
    $when                   = $arr['when'];
    $randkey                = $arr['randkey'];
    $on_off                = $arr['on_off'];

    echo $idn.': '.$news_title.'<br />';
    echo 'desc '.$news_desc.'<br />';
    echo 'id '.$user_id.'<br />';
    echo 'when '.$when.'<br />';
    echo 'key '.$randkey.'<br />';
    echo 'on '.$on_off.'<br />';

} // end foreach
} else {

echo $noResult;
}

OnOff 是1,而在table我没有任何消息与on_off1,都是0,所以它不应该显示任何消息,但它确实显示,反之亦然

提前致谢

好吧,有一个 PDOStatement::debugDumpParams 方法,但它不会显示您想要的最终查询。

如果你想调试你是 运行 的查询,我建议你查看这个问题的答案(第二个,展示了一种查看查询日志的方法):

  • How to debug PDO database queries?

这里有更多信息:

  • Getting raw SQL query string from PDO prepared statements

关于您的 on_off 专栏。如果你设置 enum('0','1'),意味着他们只接受这个值。但是当您插入值 1 (整数)时,您是说您正在插入枚举值的索引 1。在那种情况下 '0'。您应该插入 '0''1'(如 string,就像您在 sql 查询中所做的那样)或者,如果您想使用整数值,1(对于值 '0') 或 2(对于值 '1')。

有关详细信息,请阅读 here(部分“枚举文字的处理”)