2013-04-07 92 views
0

我問這個問題是因爲我一直在牆上敲打我的頭,因爲這個東西很可能有一個簡單的解決方案。我的問題是,我試圖選擇一個包含類似於「ss & 246i」的唯一ID的記錄。如果聲明不包含&符號,它將返回正常,但如果它有一個,我不會得到任何回報。這裏是我的代碼恭維我的問題:PDO select語句中的特殊字符

<?php 
@session_start(); 

if (isset($_POST['code'])) { 
    $id = $_POST['code']; 
    $db = new PDO('mysql:host=localhost;dbname=example', 'example', '******'); 
    $db->exec("SET CHARACTER SET utf8"); 

    $sql = "SELECT * FROM tbl_human_readable WHERE unique_id = :id LIMIT 1"; 
    $stmt = $db->prepare($sql); 
    $stmt->bindValue(":id", $id); 
    try { 
     $stmt->execute(); 
    } catch (PDOException $e) { 
     echo $e->getCode() . " - " . $e->getMessage(); 
    } 

    $return = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    var_dump($return); 
    if ($return) { 
     $_SESSION['code'] = $id; 
     echo "success"; 
    } else { 
     echo "failed"; 
    } 
} else { 
    echo "failed"; 
} 

一如往常在這個任何幫助是非常讚賞

+0

您的查詢似乎對我無用,無論選擇了什麼ID。你正在學習什麼教程?無論如何,沒有特殊字符可能會影響PDO查詢。所以,你的問題在別的地方。很可能有一些編碼問題或一些無用的「消毒」功能。 – 2013-04-07 03:59:53

+1

在查詢中將'':id''更改爲':id' - 引用由'prepare'完成。 – 2013-04-07 04:03:04

+0

呃......用單引號貼出來並不是故意的。因爲它們不需要,所以將它們從SELECT語句中移除。任何想法爲什麼它不可用?它的作用是減去&字符。 – Cameeob2003 2013-04-07 04:04:45

回答

3

在解決問題,程序員必須使用知識經驗

知識會告訴他沒有特殊字符會影響格式正確的PDO查詢。
所以,現在是時候嘗試一些經驗。意味着一個人不只是盯着代碼,而是運行它。爲了驗證假設的目的。

你假設$ _POST ['code']包含文字ss&246i值。但是你不知道它是否真實 - 你從來沒有驗證過它。因此,您必須在腳本中放置驗證碼才能確定。

你假設數據庫包含文字ss&246i值。但是你不知道它是否真實 - 你從來沒有驗證過它。所以,你必須運行一些代碼來驗證這個假設 - 試着選擇一個硬編碼的文字值而不是張貼一個。

這樣一個接一個地驗證你所有的假設並找出哪些假設是假的。所以,你可以自己解決問題,或者在Stack Overflow上提出一個有意義的問題。

上述過程被稱爲調試並且是程序員的工作的重要組成部分。

+0

我接受,考慮到它明顯的答案= P。在48小時內沒有睡眠緊張的時間,所以邏輯調試步驟似乎已經下滑了。常識必須具備,因爲很明顯,正確地調試代碼會讓我知道我在找什麼。 – Cameeob2003 2013-04-08 23:10:01