2015-01-05 2 views
-4

PHP MySQL은 mySQL 데이터베이스에 약간의 정보를 삽입 할 수 있습니다. 연결이 완벽하게 작동합니다.PHP는 어떤 데이터도 삽입하지 않습니다.

Error: INSERT INTO tasks ('taskName', 'requestedBy', 'details', 'dateAdded') VALUES ('test1' ,'test3' ,'test3', 2015-01-05') You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''taskName', 'requestedBy', 'details', 'dateAdded') VALUES ('test1' ,'test3' ,'te' at line 1

기능은 다음과 같다

$sql = "INSERT INTO tasks ('taskName', 'requestedBy', 'details', 'dateAdded') VALUES ('$taskname' ,'$requestedby' ,'$details', $datenow')"; 

$sql = "INSERT INTO tasks (taskName, requestedBy, details, dateAdded) VALUES ($taskname ,$requestedb ,$details, $datenow)"; 

$sql = "INSERT INTO tasks (`taskName`, `requestedBy`, `details`, `dateAdded`) VALUES (`$taskname` ,`$requestedb` ,`$details`, `$datenow`)"; 
아래와 같이 나는 $sql 라인과 여러 다른 솔루션을 시도

if(isset($_POST["submitTask"])){ 
    insertTask(); 
}; 

function insertTask(){ 
    $servername = "localhost"; 
    $username = "tasktrack"; 
    $password = ""; 
    $dbname = "tasktrack"; 

// Create connection 
$conn = mysqli_connect($servername, $username, $password, $dbname); 
// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 

$taskname = $_POST["task_name"]; 
$requestedby= $_POST["requested_by"]; 
$details = $_POST["details"]; 
$datenow = date("Y-m-d"); 

$sql = "INSERT INTO tasks ('taskName', 'requestedBy', 'details', 'dateAdded') VALUES ('$taskname' ,'$requestedby' ,'$details', $datenow')"; 

if (mysqli_query($conn, $sql)) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 

mysqli_close($conn); 
}; 

: 오전 데 문제는 다음과 같은 오류 코드를 얻고있다

이제 막 붙어서 더 이상 할 일을 생각할 수 없습니다.

+0

3 번 시도가 잘못되었습니다. 첫 번째 것은 열에 대한 따옴표를 제거하면 처음에는'$ datenow '에 대한 인용 부호가 누락되어 기쁨으로 점프합니다. –

+3

열과 테이블 이름 (있는 경우 ...) 및 값에 대해 곧은 작은 따옴표 또는 큰 따옴표가 필요합니다. 그리고 SQL injection을 피하기 위해 값을 이스케이프하거나 준비된 명령문을 사용해야합니다. – jeroen

+1

Backticks는 테이블 및 필드 이름 용입니다. 단일 (또는 이중) 따옴표는 문자열 값입니다. –

답변

2
$sql = "INSERT INTO tasks (taskName, requestedBy, details, dateAdded) VALUES ('$taskname' ,'$requestedby' ,'$details', '$datenow')"; 

// Removed quotes from columns, and added missing quote on datenow 

데이터베이스에 값을 추가하는이 기술은 매우 안전하지 않으며 SQL 주입 공격을 받기 쉽습니다.

+0

개인용 시스템이므로 로컬로 랩톱에 있기 때문에 취약점에 관해 묻지 않습니다. 나는 이전에 이것을 시도했다 – Kieranmv95

+0

Blargh, 모든 것이 서로 30 초 이내에 발생하면 중복이 발생합니다. – Blake

+0

@ Kieranmv95 그건 중요하지 않습니다; 예를 들어'''문자가 들어있는 텍스트를 삽입 할 때마다 자신의 쿼리를 깨뜨릴 수 있습니다. – jeroen

0

아포스트로피 또는 따옴표로 필드 이름을 묶어서는 안됩니다. 역 따옴표 (`)로 묶거나 그대로 사용하십시오.

$sql = "INSERT INTO tasks (`taskName`, `requestedBy`, `details`, `dateAdded`) VALUES ('$taskname' ,'$requestedby' ,'$details', '$datenow')"; 

또는 그러나

$sql = "INSERT INTO tasks (taskName, requestedBy, details, dateAdded) VALUES ('$taskname' ,'$requestedby' ,'$details', '$datenow')"; 

, 필드 이름은 MySQL의 키워드는 경우, 또는 그 다음 당신은 SQL에서 특별한 의미를 갖는 공간, 시세, 쉼표, 괄호, 연산자 또는 다른 문자가 포함 된 경우 그들을 따옴표로 묶거나 MySQL은 특수 문자에서 구문 오류를보고합니다.

관련 문제