Maison >développement back-end >tutoriel php >如何在 PHP 5.1.6 使用真正的mysql预处理?

如何在 PHP 5.1.6 使用真正的mysql预处理?

WBOY
WBOYoriginal
2016-06-06 20:47:111053parcourir

测试代码:

<code><?php $pdo = new PDO("mysql:host=example;dbname=test;","test","test");
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $st = $pdo->prepare("select * from account where username =? limit ?,?");
    $st->execute(array('buding',0,2));

    $res = $st->fetchAll();
    var_dump($res);
?>
</code>

当在 PHP 5.1.6 测试时,Wireshark检测到发送的语句是:
select * from account where username ='23' limit '2'

当在 PHP 5.3 测试时,Wireshark检测到发送的语句是:
select * from account where username =? limit ?

如何才能在PHP 5.1.6使用真的的mysql预处理呢?这是一个Bug,还是我使用的方式不对?

回复内容:

测试代码:

<code><?php $pdo = new PDO("mysql:host=example;dbname=test;","test","test");
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $st = $pdo->prepare("select * from account where username =? limit ?,?");
    $st->execute(array('buding',0,2));

    $res = $st->fetchAll();
    var_dump($res);
?>
</code>

当在 PHP 5.1.6 测试时,Wireshark检测到发送的语句是:
select * from account where username ='23' limit '2'

当在 PHP 5.3 测试时,Wireshark检测到发送的语句是:
select * from account where username =? limit ?

如何才能在PHP 5.1.6使用真的的mysql预处理呢?这是一个Bug,还是我使用的方式不对?

PHP5.3.6以前,参数绑定默认是使用PHP的预处理对参数转义。如果使用PDO,建议升级到5.3.6以后的版本,同时在DSN中指定编码。

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn