Php 创建MySQL准备语句

Php 创建MySQL准备语句,php,mysql,Php,Mysql,我绝对没有保护SQL数据的经验。我试图通过使用准备好的语句来防止对我的web服务的注入攻击。我已经学习了几个教程,但我实现的每一个教程都破坏了我的PHP脚本。如何保护此查询 $value = (integer)$_GET["name"]; $sql = "SELECT `coordinates`, `center` , `content_string` FROM Regions WHERE `id` = {$value}"; $result = $conn->query($sql);

我绝对没有保护SQL数据的经验。我试图通过使用准备好的语句来防止对我的web服务的注入攻击。我已经学习了几个教程,但我实现的每一个教程都破坏了我的PHP脚本。如何保护此查询

$value = (integer)$_GET["name"];
$sql = "SELECT `coordinates`, `center` , `content_string` FROM Regions WHERE `id` = {$value}";

$result = $conn->query($sql);

$rows = array();

if ($result->num_rows > 0) {
        // output data of each row
        while($r = mysqli_fetch_assoc($result)) {
        $rows[] = $r;
        }
    } 
以下是我的尝试:

$value = (integer)$_GET["name"];
$sql = $dbConnection->prepare('SELECT `coordinates`, `center` , `content_string` FROM Regions WHERE `id` = ?');
$sql->bind_param('i', $value);

$sql->execute();

$result = $sql->get_result();

$rows = array();

if ($result->num_rows > 0) {
        // output data of each row
        while($r = mysqli_fetch_assoc($result)) {
        $rows[] = $r;
        }
}

我不太清楚为什么这段代码不起作用。

用MySQLi准备好了语句

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $email);

// set parameters and execute
$username= "John";
$email = "john@example.com";
$stmt->execute();

$username= "Mary";
$email = "mary@example.com";
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
Php提示和技巧。

如果你关心安全,这是我非常喜欢的话题。
.

与MySQLi一起准备声明

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $email);

// set parameters and execute
$username= "John";
$email = "john@example.com";
$stmt->execute();

$username= "Mary";
$email = "mary@example.com";
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
Php提示和技巧。

如果你关心安全,这是我非常喜欢的话题。
.

您必须绑定结果,下面是代码-它将正常工作,请尝试。请检查我的代码中是否存在语法问题。否则它就会起作用

$value = (integer)$_GET["name"];
$sql = $dbConnection->prepare('SELECT 'coordinates', 'center' , 'content_string' FROM Regions WHERE `id` = ?');
$sql->bind_param('i', $value);
$sql->execute();
$sql->bind_result($coordinates, $center, $content_string)

while($sql->fetch())
{
   echo $coordinates;
   echo $center;
   echo $content_string; 
}

你将不得不绑定结果,下面是代码-它将工作,请尝试它。请检查我的代码中是否存在语法问题。否则它就会起作用

$value = (integer)$_GET["name"];
$sql = $dbConnection->prepare('SELECT 'coordinates', 'center' , 'content_string' FROM Regions WHERE `id` = ?');
$sql->bind_param('i', $value);
$sql->execute();
$sql->bind_result($coordinates, $center, $content_string)

while($sql->fetch())
{
   echo $coordinates;
   echo $center;
   echo $content_string; 
}

请展示到目前为止您在实现一个准备好的语句方面的最佳尝试,这样我们可以帮助您找出为什么它会扼杀您的PHP脚本检查此页面以获得一些建议:。如果您有任何问题,请在更新您的问题时发布错误。为什么您要混合使用mysqli调用的过程式和面向对象的风格?代码中到底有什么“不起作用”?你看到了什么错误(如果有的话)?@我刚刚收到一个标准的HTTP 500错误,我知道这个错误没有用。请展示你迄今为止在实现一个准备好的语句方面的最佳尝试,这样我们可以帮助你找出为什么它会杀死你的PHP脚本查看此页面以获得一些建议:。如果您有任何问题,请在更新您的问题时发布错误。为什么您要混合使用mysqli调用的过程式和面向对象的风格?代码中到底有什么“不起作用”?你看到了什么错误(如果有的话)?@我刚刚得到一个标准的HTTP 500错误,我知道它没有用。不幸的是,这段代码不起作用。我将在早上查看错误日志。不幸的是,此代码不起作用。我将在早上查看错误日志。