Php 为什么mysql\u real\u escape\u string()不起作用?

Php 为什么mysql\u real\u escape\u string()不起作用?,php,sql,Php,Sql,我正在尝试使用PHP向数据库中写入一些内容,但是如果我尝试使用mysql\u real\u escape\u string,我没有得到任何错误,但是没有任何内容被保存到数据库中,我不知道为什么=/特别是因为我在另一个PHP文件中也做了同样的操作,并且它工作得非常完美 <?php if(isset($_POST['reporte'])) $falla = $_POST['reporte']; else $falla = ""; if(!isset($falla)

我正在尝试使用PHP向数据库中写入一些内容,但是如果我尝试使用mysql\u real\u escape\u string,我没有得到任何错误,但是没有任何内容被保存到数据库中,我不知道为什么=/特别是因为我在另一个PHP文件中也做了同样的操作,并且它工作得非常完美

<?php
if(isset($_POST['reporte']))
    $falla = $_POST['reporte'];
else      
    $falla = "";

if(!isset($falla)){
    echo '<font color="red">Intentó enviar una forma vacía. Por favor intente de nuevo.</font>';
}else{
$fecha = mysql_real_escape_string(stripslashes($_POST['fecha']));
$usuario = mysql_real_escape_string(stripslashes($_POST['usuario']));

connection...

 $sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0')" or die('mysql_error()'); 
我已经在数据库监视器中检查并打印了它…它返回OK。。。但是,您对$falla进行消毒是什么意思?我认识注入,但我对php本身还是比较陌生的

编辑3

我使用die只是为了测试,但是没有显示错误,如果我使用mysql\u real\u escape\u string,它运行平稳,不会插入任何东西

编辑4

这是我当前的代码:

<?php
if(isset($_POST['reporte']))
    $falla = $_POST['reporte'];
else      
    $falla = "";

if(!isset($falla)){
    echo '<font color="red">Intentó enviar una forma vacía. Por favor intente de nuevo.</font>';
}else{

    $host="localhost"; // Host name
    $username="user"; // Mysql username
    $password="pass"; // Mysql password
    $db_name="cosa"; // Database name
    $tbl_name="reportes"; // Table name

    // To protect MySQL injection
    $fecha = mysql_real_escape_string(stripslashes($_POST['fecha']));
    $usuario = mysql_real_escape_string(stripslashes($_POST['usuario']));
    $falla = mysql_real_escape_string(stripslashes($falla));

    $db = mysql_connect($host, $username, $password) or die('Cannot Connect '.mysql_error()); 
     mysql_select_db($db_name) or die('Cannot select DB '.mysql_error());

    $sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0')" or die('mysql_error()');

    mysql_query($sql) or die('Error SQL !'.$sql.'<br>'.mysql_error());

    header("location:../../user/usuario.php"); 
    mysql_close();    
}  
?>

这是完整的一个,并且根据我在这里得到的建议进行了更改…仍然没有将任何内容输入数据库…

我认为您可能需要在使用之前打开mysql连接。请参阅文档

编辑

试试这个,但是表上的数据类型是什么?所有的字段都是usuario、comentario、fecha、estado字符串吗?我相信你的insert声明就是这么说的

<?php
if( isset( $_POST[ 'reporte' ] ) ) {
    $falla = $_POST[ 'reporte' ];
} else {
    $falla = "";
}

if( !isset( $falla ) ) {
    echo '<font color="red">Intentó enviar una forma vacía. Por favor intente de nuevo.</font>';
} else {

    $host = "localhost"; // Host name
    $username = "user"; // Mysql username
    $password = "pass"; // Mysql password
    $db_name = "cosa"; // Database name
    $tbl_name = "reportes"; // Table name


    $db = mysql_connect( $host, $username, $password ) or die( 'Cannot connect ' . mysql_errno( ) );
    mysql_select_db( $db_name ) or die( 'Cannot select DB ' . mysql_error( ) );

    $fecha = mysql_real_escape_string( stripslashes( $_POST[ 'fecha' ] ) );
    $usuario = mysql_real_escape_string( stripslashes( $_POST[ 'usuario' ] ) );
    $falla = mysql_real_escape_string( stripslashes( $falla ) );

    $sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0')" or die( 'mysql_error()' );

    mysql_query( $sql ) or die( 'Error SQL !' . $sql . '<br>' . mysql_error( ) );

    // You need a URL here, not a relative path
    header( "Location:../../user/usuario.php" );
    mysql_close( );
}
?>

首先,我假设下面有一个mysql_query$sql:示例的最后一行永远不会消失,因为您只是在那里创建了一个字符串

第二,您是否设置了$tbl_名称

第三,尝试打印$sql,检查它,如果它看起来正确,在数据库监视器或任何您使用的GUI工具中尝试它;查看数据是否确实在数据库中结束尝试插入,然后选择刚刚插入的数据

顺便说一句,你真的应该像清理$fecha和$usuario-mysql\u real\u escape\u stringstripslashes$falla一样清理$falla;或者类似的东西。否则,$\u POST['reporte']和$falla将成为的向量。

检查的输出

mysql扩展的一般使用模式是:

mysql_query($sql) or trigger_error(mysql_error());

您不需要在$sql变量末尾进行错误检查:

$sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0')" or die( 'mysql_error()' );
它是一种陈述,因此它不会因为失败而死亡。尝试将其更改为以下内容:

$sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0');"
不确定这是否一定是您的错误的原因,但这并不是必需的

此外,我还运行了您的代码,减去头重定向,正如nickohrn提到的,在使用mysql\u real\u escape\u字符串之前,您需要连接到mysql服务器。代码运行良好,记录在本地被存入数据库


尝试在不使用标头调用的情况下运行代码。

请尝试另一种方法。使用PEAR:DB或类似的框架来使用准备好的语句,而不是这种逃避的黑客行为。调用mysql\u real\u escape\u string和stripslashes之类的函数是引入奇怪的bug和SQL注入问题的完美方法,在这些情况下,数据中的斜杠太多或太少。

因为它不如MySQLi和PDO的prepare方法。

string mysql\u real\u escape\u string$unescaped\u string[,资源$link\u标识符]-即使可以假设链接标识符,但仍然需要存在连接才能工作。这类似于在没有连接的情况下运行mysql\u查询。是的,mysql\u real\u escape\u字符串将数据发送到mysql服务器进行转义…这就是它与mysql\u escape\u字符串的不同之处。您可以编辑原始代码示例以准确显示吗你现在有什么?我所说的清理是指数据库专用的转义字符-就像你在$fecha=mysql\u real\u escape\u stringstripslashes$\u POST['fecha']中所做的那样;
$sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0')" or die( 'mysql_error()' );
$sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0');"