PDO查询检查值是否存在

时间:2015-06-22 14:09:54

标签: php mysql pdo

我正在使用excelreader,我不想查询数据库以检查xls文件中的名称是否存在,如果是这样,它将抛出一个查询:

name1 - 存在 name2 - 不存在

我尝试了一些东西,但这就是我现在所拥有的:

<?php

require_once '../php/excelreader/reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');


$file = $_FILES['xls'];

$data->read($file['tmp_name']);

$results = '';

var_dump($data);

$sql_details = array(
    'user' => 'root',
    'pass' => 'root',
    'db'   => 'database',
    'host' => 'localhost'
);


    $db = new PDO('mysql:host='.$sql_details['host'].';dbname='.$sql_details['db'], $sql_details['user'], $sql_details['pass']);
    $stmt = $db->prepare("SELECT name FROM users WHERE name = ?");
    $stmt->bindParam(5, $value);
    $stmt->execute();

foreach($data->sheets[0]['cells'] as $value){
    $curBrand = $value[1];

    if( $stmt->rowCount() > 0 ) { # If rows are found for query
     echo "$value[1] found!";
    }
    else {
         echo "$value[1] not found! <br/>";
    }

}



?>

这不起作用我不知道该怎么做,因为我对它很陌生。

上面的代码只是回声:

测试未找到! test2未找到! 找不到ttest4! 找不到gasdgf!

它也会引发错误:Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /home/server/data/compare.php on line 27

2 个答案:

答案 0 :(得分:4)

bindParam()需要参数的1索引位置。您正在使用

$stmt->bindParam(5, $value);

5应该是1。此外,正如许多其他人所指出的那样,$value这里没有设定。您尝试运行查询后, 后才能设置它。

如果您坚持使用关键字/保留字,例如&#39; name&#39;:

,您还应该在查询中使用反引号
$stmt = $db->prepare("SELECT `name` FROM `users` WHERE `name` = ?");

在打开连接后立即添加$<your_connection>->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);以捕获PDO错误。在您打开<?php代码error_reporting(E_ALL); ini_set('display_errors', 1);后立即将错误报告添加到文件顶部 抓住其他错误。

答案 1 :(得分:1)

你只有一个参数:

  $stmt->bindParam(5, $value);

你告诉'查询'你有5个参数。  正确到1

 $stmt->bindParam(1, $value);