Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将变量插入SQL数据库时遇到问题_Php_Sql_Variables - Fatal编程技术网

使用PHP将变量插入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."))"; 到目前为止,这是唯一存在问题的部分,因为当我

我需要使用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')");
这是你的问题。您还需要绑定参数

$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注入的攻击。我只是在说明当前代码中的错误。