Javascript 选择具有多个参数的行(ajax和PHP)

Javascript 选择具有多个参数的行(ajax和PHP),javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,你好, 我是PHP/MySQL新手,我尝试从ajax发送一个请求,并使用多个参数在数据库中选择一行。 这是好办法吗 AJAX(Jquery): PHP: 感谢您的帮助。首先,您应该改用,因为当前代码容易受到SQL注入攻击。我再怎么强调也不为过,攻击者可以用您当前拥有的代码对您的数据库造成严重破坏 您应该使用以下内容(取自上面链接的页面,并在同一页面上)。请注意,我已经删除了对发布数据的intval调用,因为我假设它们是字符串而不是整数 $to_encode = array(); $mysql

你好, 我是PHP/MySQL新手,我尝试从ajax发送一个请求,并使用多个参数在数据库中选择一行。 这是好办法吗

AJAX(Jquery):

PHP:



感谢您的帮助。

首先,您应该改用,因为当前代码容易受到SQL注入攻击。我再怎么强调也不为过,攻击者可以用您当前拥有的代码对您的数据库造成严重破坏

您应该使用以下内容(取自上面链接的页面,并在同一页面上)。请注意,我已经删除了对发布数据的
intval
调用,因为我假设它们是字符串而不是整数

$to_encode = array();
$mysqli = new mysqli("localhost", "root", "password", "myDB");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT * FROM table1 WHERE firstname=? AND name=?")) {

    /* bind parameters for markers */
    $stmt->bind_param("ss", $_POST['firstname'], $_POST['name']);

    /* execute query */
    $stmt->execute();

    /* instead of bind_result: */
    $result = $stmt->get_result();

    /* now you can fetch the results into an array - NICE */
    while ($myrow = $result->fetch_assoc()) {

        // use your $myrow array as you would with any other fetch
        $to_encode[] = $myrow;

    }

    /* close statement */
    $stmt->close();
}

/* close connection */
$mysqli->close();

echo json_encode($to_encode);

您可以使用PDO和准备好的语句来完成,这将确保用户输入是安全的。像这样:

try {
    $db = new PDO('mysql:dbname=db_name;host=localhost', 'db_user', 'db_password');
} catch (PDOException $e) {
    die('Connection failed: ' . $e->getMessage());
}

$sql = "SELECT * FROM table1 WHERE firstname=:firstname AND name=:name"; 
$stmt = $db->prepare($sql);
$stmt->bindParam(':firstname', $_POST['firstname'], PDO::PARAM_STRING); 
$stmt->bindParam(':name', $_POST['name'], PDO::PARAM_STRING); 
$stmt->execute();
$result = $stmt->fetchAll();

echo json_encode($result);

将前5行移到include中,那么您只需要此代码一次。

对不起,这大概是最糟糕的方法了。您很容易受到SQL注入攻击。研究“准备好的语句”以获得更好的方法“name”和“firstname”是字符串。。。所以我想我不应该在我的PHP代码中使用“intval”。。。但是我应该使用什么呢?当使用准备好的语句时,您不需要
mysqli\u real\u escape\u string
,它会为您这样做。
$stmt = $con->prepare("SELECT * FROM table1 WHERE name=? and firstname=?");
$stmt->bind_param($name ,$firstname);

// set parameters and execute
$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$name = mysqli_real_escape_string($con, $_POST['name']);
$stmt->execute();
$stmt->bind_result($to_encode);

$stmt->fetch();

echo json_encode($to_encode);
try {
    $db = new PDO('mysql:dbname=db_name;host=localhost', 'db_user', 'db_password');
} catch (PDOException $e) {
    die('Connection failed: ' . $e->getMessage());
}

$sql = "SELECT * FROM table1 WHERE firstname=:firstname AND name=:name"; 
$stmt = $db->prepare($sql);
$stmt->bindParam(':firstname', $_POST['firstname'], PDO::PARAM_STRING); 
$stmt->bindParam(':name', $_POST['name'], PDO::PARAM_STRING); 
$stmt->execute();
$result = $stmt->fetchAll();

echo json_encode($result);
$stmt = $con->prepare("SELECT * FROM table1 WHERE name=? and firstname=?");
$stmt->bind_param($name ,$firstname);

// set parameters and execute
$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$name = mysqli_real_escape_string($con, $_POST['name']);
$stmt->execute();
$stmt->bind_result($to_encode);

$stmt->fetch();

echo json_encode($to_encode);