2015-06-09 2 views
1

Когда я делаю это, цикл foreach отлично работает., равный аргументу PHP и данным mysql, делает цикл foreach неработоспособным

<?php 
function checkInDB($NIC){ 
$user='root'; 
$pass='123'; 
$db='mysql:host=localhost;dbname=recruit'; 
$dbh= new PDO($db,$user,$pass); 

$sql = 'SELECT FirstName 
     FROM cv 
      JOIN candidate ON cv.cvID=candidate.cvID 
     WHERE ((submittedDate > NOW() - INTERVAL 365 day) 
      AND (candidate.NIC="906548765V"))'; 

echo '<h3>candidates</h3>', '<hr />', PHP_EOL; 
echo '<table border=1>', PHP_EOL; 
foreach ($dbh->query($sql, PDO::FETCH_ASSOC) as $row) { 

    echo '<tr><td>', implode('</td><td>', $row), '</td></tr>', PHP_EOL; 
} 
echo '</table>', PHP_EOL; 
} 
checkInDB("906548765V"); 

?> 

, но когда я просто изменить (candidate.NIC="906548765V") к (candidate.NIC=$NIC) , который даже делает echo ($NIC==="906548765V"); истинное, бросает непредвиденную ошибку

Недействительный аргумент для Еогеасп()

Что именно там происходит ?

+1

Это происходит потому, что ваша строка '$ sql' построен в одинарные кавычки и одинарные кавычки не интерпретирует переменные (см http://stackoverflow.com/questions/3446216/ what-is-the-difference-between-single-quoted-and-double-quoted-strings-in-php) –

ответ

5

В PHP есть 2 родов способы определить строку:

  • двойных кавычки
  • одинарных кавычек

При использовании одинарных кавычек, то строка будет, как определено. При использовании двойных кавычек PHP будет анализировать строку.

Тогда еще одна заметка. Никогда не включайте переменную в строку запроса. Только не надо. SQL-инъекции и все такое. ВСЕГДА используйте подготовленные заявления. Вы используете PDO, так что легко:

$stmt = $dbh->prepare('SELECT cols FROM table WHERE col1 = :myCol1Value'); 
$stmt->bindParam('myCol1Value',$theActualValue); 
$stmt->execute(); 
+0

Я полный новичок в PHP. Так что проблема даже не в районе, который я думал как цикл foreach! полезное предложение. –

+0

Правда, запрос не возвращает массив – Pinoniq

0

попробуйте AND (candidate.NIC="'.$NIC.'"), так как это строка, вам все равно нужны кавычки.

+0

Не уверен, почему это занижено ... Это верный ответ (хотя лучше использовать однострочный код, цитаты, чем двойные кавычки в MySQL), однако Pinoniq является более правильным для наилучшего способа сделать это. –

+1

Это не очень ответ, вы должны объяснить, почему это решило бы проблему. – jeroen

Смежные вопросы