【问题标题】:PDO and dynamic request doesn't workPDO 和动态请求不起作用
【发布时间】:2014-09-23 12:59:22
【问题描述】:

我有以下代码:

$sth = $dbh->prepare('SELECT COUNT(*) as size FROM `users` WHERE uid  = :uidVal');
$sth->bindValue(':uidVal', $_POST['uid'], PDO::PARAM_INT); 
// $_POST['uid'] == 2147483647
$sth->execute();
$size = $sth->fetchAll();

print_r($size);

print_r() 返回:

数组([0] => 数组([大小] => 0 [0] => 0))

但这是我的数据库(mysql)

我不明白为什么我的COUNT(*) 返回 0,通常它应该返回 3?

编辑(基于 cmets)

这是我在 select 语句之后的代码:

    $stmt = $dbh->prepare("INSERT INTO `users` (uid, uname) VALUES (?, ?)");
    $stmt->bindParam(1, $uid);
    $stmt->bindParam(2, $name);

    // insertion d'une ligne
    $name = $_POST['uname'];
    $uid = $_POST['uid'];
    $stmt->execute();

为什么在我的数据库中 uid 值是 2147483647 而我的 $_POST 中的 uid 值是 10152434954117198

【问题讨论】:

  • @Linger 在代码中。
  • 复查$_POST['uid']
  • @Debflav 我在等待一个结果是的,计数(*)
  • @R3tep: var_dump($_POST) 并向我们展示输出。
  • 另外,我在这里闻到整数溢出的味道......

标签: php mysql pdo


【解决方案1】:

uid 值对于我的数据库配置来说太大了:

10152434954117198 是长整数而不是整数

【讨论】:

    【解决方案2】:

    试试这个代码。

    $sth = $dbh->prepare('SELECT COUNT(*) as size FROM `users` WHERE uid  = ?');
    $sth->bindValue(1, $_POST['uid']); 
    // $_POST['uid'] == 2147483647
    $sth->execute();
    $size = $sth->fetchAll();
    
    print_r($size);
    

    或者你也可以试试这个

    $sth = $dbh->prepare('SELECT COUNT(*) as size FROM `users` WHERE uid  = :uidVal'); 
    // $_POST['uid'] == 2147483647
    $sth->execute([
        "uidVal" => $_POST['uid']
    ]);
    $size = $sth->fetchAll();
    
    print_r($size);
    

    【讨论】:

      猜你喜欢
      • 2018-06-26
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多