使用PHP将变量插入SQL数据库时遇到问题
我需要使用PHP将HTML文档中的信息保存到SQL数据库中。然而,我对变量的串联有一个问题。这就是我到目前为止所做的:使用PHP将变量插入SQL数据库时遇到问题,php,sql,variables,Php,Sql,Variables,我需要使用PHP将HTML文档中的信息保存到SQL数据库中。然而,我对变量的串联有一个问题。这就是我到目前为止所做的: $requete= $sql->prepare"(INSERT INTO personnes (name,surname,street,city,country) VALUES". "("$name.$surname.$street.$city.$country."))"; 到目前为止,这是唯一存在问题的部分,因为当我
$requete= $sql->prepare"(INSERT INTO personnes (name,surname,street,city,country)
VALUES". "("$name.$surname.$street.$city.$country."))";
到目前为止,这是唯一存在问题的部分,因为当我初次登场时,代码的其余部分正在工作。我做错了什么 使用
,
分隔值<代码>(点)用于连接字符串
$requete= $sql->prepare("INSERT INTO personnes (name,surname,street,city,country)
VALUES ('$name','$surname','$street','$city','$country')");
这是你的问题。您还需要绑定参数
$sql->bind_参数($name、$姓氏、$street、$city、$country)代码>
有关详细信息,请使用?
作为值,并将值绑定到查询。我实际上不能给你举个例子
以下章节也对这一点进行了描述:
您可以对mysqli语句对象使用参数绑定,它在面向对象样式的第一个示例中是如何显示的:
示例#1面向对象风格
<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
/* execute prepared statement */
$stmt->execute();
printf("%d Row inserted.\n", $stmt->affected_rows);
/* close statement and connection */
$stmt->close();
/* Clean up table CountryLanguage */
$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d Row deleted.\n", $mysqli->affected_rows);
/* close connection */
$mysqli->close();
?>
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$city = "Amersfoort";
/* create a prepared statement */
$stmt = mysqli_stmt_init($link);
if (mysqli_stmt_prepare($stmt, 'SELECT District FROM City WHERE Name=?')) {
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $city);
/* execute query */
mysqli_stmt_execute($stmt);
/* bind result variables */
mysqli_stmt_bind_result($stmt, $district);
/* fetch value */
mysqli_stmt_fetch($stmt);
printf("%s is in district %s\n", $city, $district);
/* close statement */
mysqli_stmt_close($stmt);
}
/* close connection */
mysqli_close($link);
?>
此代码有许多问题。首先,您不希望连接。您希望将每个值插入数据库,对吗?这也是使用准备好的语句的正确方法。或者我认为这也应该是一个500。你需要学习基本的PHP语法,以及如何使自己不易受到攻击,如果有人这样做时有一个最常见的评论,那就是“sql注入攻击”。这让我想知道为什么这不是一种更明显的错误的做事方式。比如,PHP应该反对它的使用,或者完全不允许它。不知怎的。某种IDE静态代码分析警告?令人惊讶的是,有人还没有在它流行的情况下构建它。也许值得一提的是,该语句中的SQL注入缺陷,以及使用预处理语句来克服这些缺陷。您还纠正了其他问题(SQL字符串需要引号,prepare
是一个函数)。但准备好的语句仍被错误使用。是的。你是对的。这容易受到sql注入的攻击。我只是在说明当前代码中的错误。