我正在使用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
答案 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);