2016-04-13 14 views
0

yakınında kullanmak için doğru sözdizimi için MariaDB sunucu sürümünüze karşılık gelen kılavuzu kontrol edin. Bu form verisini test ettiğim için hiçbir sorunum olmadı. Daha karmaşık metin eklemeyi denediğimde, $post_content = $_POST['post_content']; tarafından sayısal ve alfabetik olmayan karakterlerle alınan textarea'da bu hatayla karşılaştım.QUERY FAILED: SQL sözdiziminizde bir hata var;

QUERY FAILED: SQL sözdiziminizde bir hata var; aşağıdaki gibidir

Benim kod yakın kullanma hakkı sözdizimi için mariadb sunucu sürümü ile uyumlu kılavuzu kontrol edin:

<?php 
    if (isset($_POST['create_post'])){ 

     $post_title = $_POST['title']; 
     $post_author = $_POST['author']; 
     $post_category_id = $_POST['post_category_id']; 
     $post_status = $_POST['post_status']; 
     $post_image = $_FILES['image']['name']; 
     $post_image_temp = $_FILES['image']['tmp_name']; 
     $post_tag = $_POST['post_tag']; 
     $post_content = $_POST['post_content']; 
     $post_date = date('d-m-y'); 
     $post_comment_count = 4; 

     move_uploaded_file($post_image_temp, "../images/$post_image"); 

     $query = "INSERT INTO posts (post_category_id, post_title, post_author, post_date, post_image, post_content, post_tag, post_comment_count, post_status) "; 

     $query .= "VALUES ({$post_category_id},'{$post_title}','{$post_author}',now(),'{$post_image}','{$post_content}','{$post_tag}','{$post_comment_count}','{$post_status}') "; 

     $create_post_query = mysqli_query($connection, $query); 
     checkQuery($create_post_query); 
    } 
?> 
<form action="" method="post" enctype="multipart/form-data"> 
    <div class="form-group"> 
     <label for="post_status">Post Title</label> 
     <input type="text" class="form-control" name="title"> 
    </div> 
    <div class="form-group"> 
     <label for="post_category">Post Category Id</label> 
     <input type="text" class="form-control" name="post_category_id" placeholder="Please enter a number"> 
    </div> 
    <div class="form-group"> 
     <label for="post_author">Post Author</label> 
     <input type="text" class="form-control" name="author"> 
    </div> 
    <div class="form-group"> 
     <label for="post_status">Post Status</label> 
     <input type="text" class="form-control" name="post_status"> 
    </div> 
    <div class="form-group"> 
     <label for="post_image">Post Image</label> 
     <input type="file" name="image"> 
    </div> 
    <div class="form-group"> 
     <label for="post_tag">Post Tags</label> 
     <input type="text" class="form-control" name="post_tag"> 
    </div> 
    <div class="form-group"> 
     <label for="post_tags">Post Content</label> 
     <textarea class="form-control" name="post_content" id="" cols="30" rows="10"></textarea> 
    </div> 
    <div class="form-group"> 
     <input class="btn btn-primary" type="submit" name="create_post" value="Publish Post"> 
    </div> 
</form> 

benim $post_content = $_POST['post_content']; birlikte mysqli_real_escape_string kullanılarak teşebbüs ve başarılı olmamıştır Bu da sorgu sözdiziminin kapalı olduğunu düşünmeme neden oluyor. Herhangi bir yardım büyük takdir edilecektir.

+2

yanlış senin sorgusu olur. Böyle bir sorguda başarılı olmak çok daha kolaydır ve sql enjeksiyonu hakkında endişelenmenize gerek kalmaz. – Rasclatt

+1

sorgunuzu ekleyip ne döndüğünü kontrol edin! – Saty

+1

[** SQL injection **] 'a (https://www.owasp.org/index.php/SQL_Injection) çok açıksınız. Kendi senaryonuzu bozduğun için hatalara giriyorsun. @Rasclatt'ın dediği gibi, hazırlanan ifadeleri kullanmalısınız. –

cevap

-1

denemeydi

bu sorgu Hazırlıklı ve sınır sorguları kullanarak olmalıdır

$query = "INSERT INTO posts (post_category_id, post_title, post_author, post_date, post_image, post_content, post_tag, post_comment_count, post_status) "; 

    $query .= "VALUES ({$post_category_id},'{$post_title}','{$post_author}','".date('Y-m-d')."','{$post_image}','{$post_content}','{$post_tag}','{$post_comment_count}','{$post_status}') ";