2016-06-09 4 views
0

문자열에이 문자가있는 경우 저장하려고합니다.'(작은 따옴표) - 저장하지 않습니다. 오류가 생성되지 않습니다. 무엇이 잘못되었는지 이해하는 데 도움이 필요합니다. 내 캐릭터 세트는 프랑스어 문자를 수용해야합니다. 그렇지 않으면 모든 것이 잘 작동합니다.mySql에 저장하려고 할 때 '(작은 따옴표) 문자 사용 문제가 발생했습니다.

<?php 
header ('Content-type: text/html; charset=utf-8'); 

include_once('../../../init.php'); 

mysql_set_charset("utf8"); 

$articleid = $_POST['articleid']; 
$contenu = $_POST['editabledata']; 
$name = $_POST['name']; 

mysql_query(" 
UPDATE al_articles SET $name='$contenu' 
WHERE (ArticleID='$articleid') 

") or die(mysql_error()); 

?> 
+0

당신은 준비된 문으로 PDO/MySQLi를 사용한다. 당신이 얻는 오류는 왜 SQL 인젝션 공격에 취약한 것과 똑같은 이유로,''는 SQL 구문 오류를 일으키는 문자열을 닫았 기 때문에 열 값을 조기에 끝냅니다. –

+0

[mysql_' 데이터베이스 확장 프로그램] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)을 사용하지 마십시오. 은 더 이상 사용되지 않습니다 (영원히 사라짐). PHP7에서) 특별히 PHP를 배우는 경우,'PDO' 데이터베이스 확장을 배우는 데 에너지를 소비하십시오. [여기에서 시작하십시오] (http://php.net/manual/en/book.pdo.php) 매우 쉽습니다. – RiggsFolly

+2

작은 따옴표를 이스케이프해야합니다. 'mysql_real_escape_string ($ content)'이 처리합니다. *주의 사항 * mysql 라이브러리는 더 이상 사용되지 않아야한다. 준비된 구문을 사용할 수있는 중고 PDO 또는 mysqli –

답변

0

사용 addslashes 당신이 당신의 쿼리에서 원료 사용자 입력을 사용하고 있기 때문에 SQL Injection이라고 당신이하고있는

$articleid = addslashes($_POST['articleid']); 
$contenu = addslashes($_POST['editabledata']); 
$name = addslashes($_POST['name']); 
+0

이것도 작동합니다, 감사합니다! – Sergelie

+0

welcome @ user3371049 – Mani

1

.

쿼리보다 Hello, my name is 'justinas'을 전달하면 UPDATE al_articles SET $name='Hello, my name is 'justinas''처럼 보입니다. 그리고 닫힌 문자열 때문에 SQL 쿼리가 파손되는 것을 알 수 있습니다.


사용 비 사용되지 않는 라이브러리 해결 방법 : PDO 또는 mysqli_*.
보다 사용 준비 진술과 매개 변수 바인딩 :

$name = preg_replace('/[^a-zA-Z]/', '', $_POST['name']); 
$sql = $pdo->prepare("UPDATE al_articles SET `{$name}` = :content WHERE `ArticleID` = :id"); 
$sql->execute([ 
    ':content' => $_POST['editabledata'], 
    ':id' => $_POST['articleid'] 
]); 
+0

이해합니다. 이 솔루션은 효과적이었습니다 : mysql_real_escape_string ($ contenu). 네가하지 않는다면, 단순히 구원을 거부한다. 나는 전문가가 아니기 때문에 그 이유를 모른다. 하지만 요점이 있어요. 고맙습니다. – Sergelie

관련 문제