2016-01-06 189 views
-3

我已經使用了一個準備好的語句來定義id索引,但是它告訴我,由於某種原因它是未定義的,在哪裏以及爲了工作而改變了什麼?注意:未定義的索引:id

<?php 

$db_username='student'; 
$db_password='student'; 
$db = new PDO ('mysql:host=192.168.56.2;dbname=Assessment', $db_username, $db_password); 

$result = $db ->prepare("SELECT * FROM Jobs WHERE jobname='".$_GET['id']."' "); 
$result->execute(); 
+8

您使用預處理語句.....仍然直接截獲用戶輸入值到您的SQL查詢....捂臉 –

+0

這是什麼未定義:'$ _GET ['id']' – mopo922

+1

解決的辦法是確保'$ _GET ['id']'實際上是第一次設置....然後在查詢中使用__bind變量_0 –

回答

1

試試這個:

<?php 

$db_username='student'; 
$db_password='student'; 
$db = new PDO ('mysql:host=192.168.56.2;dbname=Assessment', $db_username, $db_password); 

if(isset($_GET['id'])) { 
$result = $db ->prepare("SELECT * FROM Jobs WHERE jobname=?"); 
$result->execute(array($_GET['id']);`enter code here 
} 
else {echo('$_GET["id"] not set');} 
+0

你應該使用空而不是isset,這樣,如果它被設置並且它的空它仍然會說它沒有設置 –

+1

@YannChabot但是空()'將導致零爲空,否?或者也許不是,因爲它是一個字符串? – user1032531

+0

你是對的@ user1032531!讓它變空,對我的壞事感到抱歉。 !如果變量設置爲空而不爲空,則empty將返回false,而isset只會在變量存在時返回,但不會檢查它是否有值 –

0

首先,驗證$ _GET [ '身份證']有一個值。其次,爲了安全,改變一些線路:

$result = $db ->prepare("SELECT * FROM Jobs WHERE jobname=:id"); 

$result->execute(array(':id' => $_GET['id']));