2014-03-02 2 views
-1

이 스크립트가 있습니다.mysqli_real_escape_string이 빈 문자열

<?php 
session_start(); 
if (!isset($_POST['text']) || $_POST['text'] == "" || strlen($_POST['text']) < 5) { 
echo "error"; 
echo '<meta http-equiv="refresh" content="2;url=../prispevky/add.php">'; 
return 0;} 
else $text = $_POST['text']; 

if (!isset ($_SESSION['nick'])) { 
echo "error"; 
echo '<meta http-equiv="refresh" content="2;url=../error.php">'; 
return 0;} 
else $nick = $_SESSION['nick']; 

$time = time(); 

$farby = array("red","blue","green", "brown", "orange", "purple", "grey", "lime", "yellow", "pink"); 
include_once "../inkludy/conect.php"; 
$new = $_POST['text']; 
echo $new; 
$new = mysqli_real_escape_string($_POST['text']); 
echo $new; 

$new = str_replace(array("\\r\\n", "\n"), "</br>", $new); 
for ($i=0;$i<10;$i++){ 
if (preg_match ('/&lt; .{1,10} &gt;/', $new, $meno)){ 
    $nove_meno = preg_replace('/(&lt;)|(&gt;)/', '', $meno[0]); 
    $new = preg_replace('/' . $meno[0] . '/', '<b style="color:' . $farby[$i] . '">>' . $nove_meno . '<</b>', $new); 
} 
} 

    try { 
    $query = "INSERT INTO hlasky (autor,text,onoff,time) VALUES (:nick,:new,:onoff,:time)"; 
    $stmt = $conn->prepare($query); 
    $stmt->bindValue(':nick', $nick, PDO::PARAM_STR); 
    $stmt->bindValue(':new', $new, PDO::PARAM_STR); 
    $stmt->bindValue(':onoff', '1', PDO::PARAM_INT); 
    $stmt->bindValue(':time', $time, PDO::PARAM_INT); 
    $stmt->execute();} 

catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage();} 
?> 
<meta http-equiv="refresh" content="10;url=../hmenu/najn.php"> 

$ _POST = "asdasd"와

$new = $_POST['text']; 
echo $new; 

작품을 잘하지만, 및 에코의 asdasd하지만

$new = mysqli_real_escape_string($_POST['text']); 
echo $new; 

이 비어있는 새로운 $합니다. 모두가 내가 MySQL의 연결을 해달라고하지만 난이 있고

INSERT INTO hlasky (autor,text,onoff,time) VALUES (:nick,:new,:onoff,:time) 

도 작동하지만 생각 : 새가 비어 당신이 $ 새 문자열을 느슨하게하지 않는 방법 나를 도와 드릴까요?

이것은 내 연결 스크립트입니다. include_once "../inkludy/conect.php";

<?php 
$server = "localhost"; 
$username = ""; 
$password = ""; 
$databaza_meno = "iz"; 

$dsn = "mysql:unix_socket=/tmp/mysql50.sock;dbname=$databaza_meno"; 
$conn = new PDO($dsn, $username, $password); 

$db_spojenie = mysql_connect($server, $username, $password); 
$db = mysql_select_db($databaza_meno, $db_spojenie); 
mysql_query("SET NAMES utf-8"); 
?> 
+2

* real_escape_string을 PDO와 함께 사용해서는 안됩니다. 오, 당신은 mysql과 mysqli를 혼합하고 pdo는 모두 togeather입니다. –

+1

왜 mysql_ *와 PDO를 혼합하고 있습니까? –

+0

그래서 PDO 또는 real_escape_string 만 사용해야합니까? – OdkoPP

답변

-4

mysqli_real_escape_string을 호출 할 때 링크를 지정해야한다고 생각합니다. PDO는 자주 사용하지 않지만 링크 $conn은 PDO에 있기 때문에 mysqli로 시작하는 함수를 사용하려면 mysqli_connect을 사용하여 새 링크를 지정해야합니다.

mysqli_real_escape_string에 대한 문서는 여기에 있습니다 : http://us2.php.net/manual/en/mysqli.real-escape-string.php

+2

PDO를 사용하는 경우 * _real_escape_string을 사용하지 마십시오 –

+0

하지만 질문은 PDO가 아니라 mysqli_real_escape_string에 관한 것입니다. –

+1

@SethRachwitz 당신은 둘 중 하나를 사용합니다. 사실,이 질문에는 세 가지 mysql API가 모두 포함되어있다. – Mike

0

솔루션은 mysqli_real_escape_string를 제거하고 준비된 문 탈출 자동으로 자료를 제공하기 때문에 단지 PDO를 사용하는 것이 었습니다.