2009-06-02 58 views
0

我很難正確引用SQL字符串,我想知道是否有程序或網站可以幫助我正確引用字符串。在我可以輸入SQL字符串的地方,網站會爲我分析和引用它。或者可能是一個程序..我需要它,因爲我遇到了麻煩..有沒有可以幫助我的服務正確引用SQL字符串?

對不起,我沒有提供有關我的問題的詳細信息,我有這個SQL字符串。我從書中得到它,但我很難適時地引用它。

$sql = "INSERT INTO books(title, author, isbn, publisher, year, summary) VALUES (" .$conn->quote($_POST['title']) . 
', ' . $conn->quote($_POST['author']) . 
', ' . $conn->quote($_POST['isbn']) . 
', ' . $conn->quote($_POST['publisher']) . 
', ' . $conn->quote($_POST['year']) . 
', ' . $conn->quote($_POST['summary']) . 
')'; 

你可以看到有很多報價在那裏發生!我從一本書中得到了它,但是當我需要用這種相同的難度來設計自己的SQL字符串時,也許我會分裂。

你有建議,網站或程序可以幫助我逃避/引用字符串嗎?

+0

您不應該手動引用SQL查詢。相反,使用準備好的語句。戴夫向你展示瞭如何爲ADO.NET做到這一點。對其他語言/環境也是可能的。你在用什麼? – 2009-06-02 03:01:28

回答

4

好吧,它看起來像你使用PHP。你不應該手動引用,而是使用預先準備的語句。以下是使用PDO執行此操作的一種方法。其它有效的語法在PDOStatement->execute給出:

$stmt = $db->prepare("INSERT INTO books(title, author, isbn, publisher, year, summary) VALUES(:title, :author, :isbn, :publisher, :year, :summary)"); 
$title="Hitchhiker's Guide"; 
$author="Douglas Adams"; 
$isbn="0345391802"; 
$publisher="Del Rey"; 
$year="1995"; 
$summary="Arthur Dent accidentally saves the world."; 
$stmt->bindParam(":title", $title); 
$stmt->bindParam(":author", $author); 
$stmt->bindParam(":isbn", $isbn); 
$stmt->bindParam(":publisher", $publisher); 
$stmt->bindParam(":year", $year); 
$stmt->bindParam(":summary", $summary); 
$stmt->execute(); 
+0

謝謝!!很有幫助。我剛開始學習PDO和MySQL,所以我對引用非常困惑。而且這本書還沒有達到我現在正在閱讀的這本書中的執行聲明。 – 2009-06-02 05:19:35

5

你能更具體一點嗎?在編寫ADO.NET代碼,您通常使用的SqlParameter對象,像這樣,它自動使所有的這些東西的護理:

var cmd = new SqlCommand("select * from foo where fooName = @fooName;", connection); 
cmd.Parameters.AddWithValue("@fooName", "O'Reilly is a bloviator"); 
cmd.ExecuteReader(); 
0

,大多數幫助我時寫SQL是突出了一個很好的文本編輯器的東西文本。關於使用哪個文本編輯器有許多討論。我更喜歡vi,但我是積極的emacs也會做,以及日食和幾乎所有不是普通的舊窗口記事本。

+0

我使用Textmate,它沒有正確的高亮顯示。突出顯示糟糕.. – 2009-06-02 03:29:06

0

你有一個建議,其中 網站或程序可以幫我 正確轉義/報價字符串?

您可能不需要逃避串在PHP如果設置所謂magic_quotes_gpc上。你可以看看它是或不寫在它與這個代碼的PHP文件:

<?php 
    var_dump(get_magic_quotes_gpc()); 
?> 

它會顯示一個bool(true)還是布爾(假)。如果它是假的,則使用名爲mysql_real_escape_string的函數來轉義。如果這是真的,你不需要做任何事情,你的輸入將被自動轉義。請記住,不要這樣做,你不想逃避兩次。另外,您可以使用此功能,會發現,如果你一定要逃逸與否:

<?php 
    function clean($input) { 
     if (get_magic_quotes_gpc()) { 
      // magic quotes are on, no need to escape 
      return $input; 
     } else { 
      // magic quotes are off, we need to escape 
      return mysql_real_escape_string($input); 
    } 
?> 

就用這樣的:

<?php 
    $result = mysql_query(sprintf('SELECT * FROM `table` WHERE user="%s"', clean($_POST['user']))); 
?> 

我不能檢查代碼我已提交錯別字,但希望...

相關問題