2016-01-06 187 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']));