2016-05-16 103 views
0

我在尝试在MySQL中输入数据时没有用引号引起问题。PHP - 在没有引号的情况下在MySQL中输入查询

下面是它如何出现在MySQL的截图

DB ENTRY

下面是INSERT INTO代码,将其放入数据库中,我需要它输入到MySQL没有它被证明是具有挑战性的报价...

<?php include('db_connect.inc');?> 

<?php 
$result = $conn->prepare("INSERT INTO dog_park.reviews (review_text, username, date, rating, item) VALUES (:review, :id, :date, :rating, :keyword)"); 
$result->bindParam(':review', $value1); 
$result->bindParam(':id', $value2); 
$result->bindParam(':date', $value3); 
$result->bindParam(':rating', $value4); 
$result->bindParam(':keyword', $value5); 


$value1 = $_POST['review']; 
$value2 = $_SESSION['id']; 
$value3 = $date = date("Y-m-d"); 
$value4 = $_POST['rating']; 
$value5 = $_SESSION['KEYWORD']; 
$result->execute(); 
echo "Review entry Successful, you will now be redirected to the home page"; 

header("refresh:10; url=index.php"); 
?> 

也许与$ _SESSION有关?

+2

没有错,你的代码是如何表单请亲?提供请求的转储。问题出在那里.. – Gogol

+0

这里的东西不合适。你应该在绑定参数之前定义'$ valueN'变量。还要在你的代码中添加'var_dump($ _ POST)',看看有什么要调用 –

+0

从窗体开始并按照处理过程。这里没有什么会将引号添加到数据库中。也许当你存储会话值你concat引号? – chris85

回答

1

也许修剪出在每个发布值的两侧多余的行情可以做的伎俩为你喜欢这样:

<?php 
     include('db_connect.inc'); 
     $result = $conn->prepare("INSERT INTO dog_park.reviews (review_text, username, date, rating, item) VALUES (:review, :id, :date, :rating, :keyword)"); 

     $date = date("Y-m-d"); 
     $value1 = trim($_POST['review'],  "'\""); 
     $value2 = trim($_SESSION['id'],   "'\""); 
     $value3 = trim($date,     "'\""); 
     $value4 = trim($_POST['rating'],  "'\""); 
     $value5 = trim($_SESSION['KEYWORD'], "'\""); 

     $result->bindParam(':review', $value1); 
     $result->bindParam(':id',  $value2); 
     $result->bindParam(':date',  $value3); 
     $result->bindParam(':rating', $value4); 
     $result->bindParam(':keyword', $value5); 

     $result->execute(); 
     echo "Review entry Successful, you will now be redirected to the home page"; 

     header("refresh:10; url=index.php"); 
    ?> 
+0

不要只添加创可贴,应该找到并修复问题。 – chris85

+2

这是一个不好的解决方案恕我直言。找出问题的根源会更好。 – Gogol

+0

@ chris85无论根源是什么,修剪多余的语句既不会增加也不会从程序中删除某些东西......有时候,创可贴可能意味着做和不做的区别...... ** *但是**是的,找到根本原因应该是最重要的...... ** ;-) – Poiz

0

使用stripslashes(string $str)联合国引号引用的字符串。

但在你的情况,你需要逃逸特殊字符串中的字符用在SQL语句中让你用:mysql_real_escape_string

mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,其中前添加反斜杠以下字符:\ X00,\ n,\ r,\,”,“和\ X1A

例如:。

<?php 
// We have not connected to MySQL 

$lastname = "O'Reilly"; 
$_lastname = mysql_real_escape_string($lastname); 

$query = "SELECT * FROM actors WHERE last_name = '$_lastname'"; 

var_dump($_lastname); 
var_dump($query); 
?> 
+0

不,1.那个函数'返回一个带反斜线的字符串'。 2.问题应该解决,而不是破解。 – chris85

+1

@ chris85这只是对问题的直接回答。如何去除报价。但是现在我再次读到这个问题,我认为OP必须使用'mysql_real_escape_string' –

+0

否,这是不正确的。准备好的语句是正确的,不要将引号添加到实际值中。问题在别处,这个答案不是答案。 – chris85

相关问题