Javascript 选择具有多个参数的行(ajax和PHP)
你好, 我是PHP/MySQL新手,我尝试从ajax发送一个请求,并使用多个参数在数据库中选择一行。 这是好办法吗 AJAX(Jquery): 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
感谢您的帮助。首先,您应该改用,因为当前代码容易受到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);