2013-10-17 4 views
1

MySQL 업데이트 쿼리에 문제가 있습니다. 성공적이라고 말하지만 데이터베이스 레코드를 실제로 업데이트하지는 않습니다.내 업데이트 쿼리에 문제가 있습니까?

require_once('auth.php'); 

$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password="sysadmin"; // Mysql password 
$db_name="Elite"; // Database name 
$tbl_name="Triage"; // Table name 

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

$Reference=$_GET['Reference']; 

$sql="UPDATE Triage SET directly='$directly' WHERE Reference='$Reference'"; 
$result=mysql_query($sql); 

if($result){ 
echo "Successful"; 
echo "<BR>"; 
echo "<a href='list_records.php'>View result</a>"; 
} 
else { 
echo "ERROR"; 
} 
+2

mysql_error()에서 질문하기 - 정답은 –

+2

입니다. mysqli 또는 pdo가 아닌 MySQL을 사용하십시오. 사용자 입력을 검증하지 않으며 오류 처리를하지 않습니다. $는 어디에도 정의되어 있지 않습니다. ... 잘못 된 목록의 처음 몇 항목입니까? –

+1

$는 어디에 있습니까? –

답변

2

당신은 $directly을 정의하지 않았고 그래서 directly 필드는 빈 문자열로 업데이트됩니다. 필드가 변경되지 않은 경우 (즉, 이미 빈 문자열이었던 경우) mysql_query()은 여전히 ​​true을 반환하며 오류가 발생하지 않습니다.

$directly이 이전 페이지에서 정의 된 경우 다른 페이지에도 자동으로 유지되지 않습니다. $_SESSION 또는 다른 매체에서 유지하거나 $_GET 또는 $_POST 변수로 전달해야합니다.


사이드 노트 : mysql_*은 더 이상 사용되지 않으며 코드는 SQL 인젝션에 취약합니다. Prepared Statement와 바운드 매개 변수를 사용하여 PDO 또는 MySQLi로 업그레이드하는 것을 고려하십시오.

+0

사람들을 격려하는 것은 좋지 않습니다. 그들의 진절머리 나는 질문에 답하는 것은 코멘트 섹션에서 대답됩니다. – samayo

+0

@MrCode 이것에 대해 고마움, 나는 그것을 지금 시도해 볼 것입니다, 나는 내가 지금해야 할 것을 알고 있다고 생각합니다. 건배 –

+0

또한 세션을 어떻게 닫으시겠습니까? 건배 –

1

어떤 쿼리를 작성하는 동안, 당신은 처음처럼이 변수가 정의되어 있는지 여부를 확인 여부를해야합니다

if(isset($directly) && isset($Reference)){ 
    $sql="UPDATE Triage SET directly='$directly' WHERE Reference='$Reference'"; 
    $result=mysql_query($sql); 
} 

그리고 mysql_로 * 확장 php5.5.0의 같은 deprecated이다, 대신, MySQLi 또는 PDO_MySQL 확장되어야한다 익숙한.

관련 문제