2009-06-02 3 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 쿼리를 수동으로 인용해서는 안됩니다. 대신 준비된 문을 사용하십시오. Dave는 ADO.NET에서이 작업을 수행하는 방법을 보여주었습니다. 다른 언어/환경에서도 가능합니다. 뭐라구? –

답변

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을 배우기 시작 했으므로 따옴표와 혼동 스러웠습니다. 그리고 책은 제가 지금 읽고있는이 책에서 아직 성명을 발표하지 않았습니다. –

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를 선호하지만, 이맥스와 함께 이클립스와 함께 할 수있는 긍정적 인 이맥스이며 평범한 구식 윈도우 노트 패드가 아닌 모든 것에 대해서도 그렇다.

+0

Textmate를 사용하고 있는데, 강조 표시가 올바르지 않습니다. 강조 표시는 .. –

0

당신은 추천이 있나요 어디 웹 사이트 또는 나를 제대로/인용 문자열을 탈출 도움을 줄 수있는 프로그램? 설정이 magic_quotes_gpc라고하면 당신은 PHP에 문자열 을 탈출하지 않아도됩니다

이 켜져 있습니다. 그것은이 코드와 PHP 파일을 작성하여 또는없는 경우 당신은 밖으로 찾을 수 있습니다

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

그것은 부울 (true) 또는 부울 (거짓)를 표시합니다. false 인 경우 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']))); 
?> 

내가 '코드를 확인할 수 아니에요 또는 당신은 당신이 탈출 여부를 필요가 있는지 확인합니다이 기능을 사용할 수 있습니다 오타를 위해 제출되었지만 잘하면 ...

관련 문제