2015-09-28 23 views
-5

我需要从预防帮助“注意:数组字符串转换在”防止从“注意:数组字符串转换在”

$stmt = $DBH->prepare("SELECT * FROM users WHERE id = :emailid"); 
$stmt->bindParam(':emailid', $emailid, PDO::PARAM_STR); 
$stmt->execute(); 
$result = $stmt->fetchAll();  
foreach($result as $row) 
    { 
    echo $row['id'].'<br />'; 
    echo $row['emailid'].'<br />'; 
    echo $row['password']; 
    } 

Everythink其OK,index.php?id=5

但是当我把index.php?id[]=5

回到我错误

Notice: Array to string conversion in 

什么是最好的w^ay在这种情况下检查数组; error_reporting(0)不是我想找到优化方法的解决方案。

+3

正是你所期待发生把里面'GET'参数数组的符号是什么时候? 'index.php?id [] = 5' –

+1

检查数组:http://php.net/is_array – Mike

+0

只是测试所有参数,在这种情况下,你可以看到完整的路径披露... – user3576620

回答

1

不知道你想要这个问题走向哪个方向。但是让我们假设你想要的 - 出于某种原因 - 让它工作两种方式:?id=...?id[]=...&id[]=...

if (!is_array($_GET['id'])) { 
    // just make it an array with one element 
    $ids = array($_GET['id']); 
    // so having a simple type string id is just a special case of the 
    // array case 
} 
else { 
    $ids = $_GET['id']; 
} 

$stmt = $DBH->prepare("SELECT * FROM users WHERE id = :emailid"); 
$stmt->bindParam(':emailid', $emailid, PDO::PARAM_STR); 
foreach($ids as $emailid) { 
    $stmt->execute(); 
    $result = $stmt->fetchAll();  
    foreach($result as $row) { 
     ... 
    } 
} 
+0

btw,在别人指出它之前:还可以创建一个'WHERE ID IN(?,?,?...)'准备好的语句,其准确的参数数量为count($ IDS )' - 但我不会从那里开始,但依靠查询计算器来做好工作,网络开销可以忽略不计。如果这些假设是错误的,你仍然可以改变它;-) – VolkerK

相关问题