嘿,我是一个PHP新手,在这里建立一个"fetch,post to db,allow delete"项目,我已经获取了数据,打印了数据库行,现在我正在添加删除每一行的功能,'$id'但我是遇到这个错误.
我突出显示81行的astricks以及上下两个注释块,以便您轻松找到它.
谢谢你帮我学习.
<?php
// ***** MagicQuoteFix ***** //
if (get_magic_quotes_gpc())
{
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
$_POST = array_map('stripslashes_deep', $_POST);
$_GET = array_map('stripslashes_deep', $_GET);
$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}
// ***** Begin Connection Info ***** //
$connection = mysqli_connect('localhost', 'ijdbuser', 'ijdbpw');
if (!$connection)
{
$error = 'Unable to connect to the database server.';
include 'error.html.php';
exit();
}
if (!mysqli_set_charset($connection, 'utf8'))
{
$output = 'Unable to set database connection encoding.';
include 'output.html.php';
exit();
}
if (!mysqli_select_db($connection, 'ijdb'))
{
$error = 'Unable to locate the joke database.';
include 'error.html.php';
exit();
}
// ***** Display DB ***** //
$result = mysqli_query($connection, 'SELECT id, joketext FROM joke');
if (!$result)
{
$error = 'Error fetching jokes: ' . mysqli_error($connection);
include 'error.html.php';
exit();
}
while ($row = mysqli_fetch_array($result))
{
$jokes[] = array('id' => $row['id'], 'text' => $row['joketext']);
}
if (isset($_GET['addjoke'])) {}
else
{
include 'jokes.html.php';
}
//
// ***** Begin Add/Remove DB Options ***** //
if (isset($_GET['addjoke']))
{
include 'form.html.php';
exit();
}
if (isset($_GET['deletejoke']))
{
// LINE 81 //
******81.****** $id = mysql_real_escape_string($connection, $_POST['id']);
// LINE 81 //
$sql = "DELETE FROM joke WHERE id='$id'";
if (!mysqli_query($connection, $sql))
{
$error = 'Error deleting joke: ' . mysqli_error($connection);
include 'error.html.php';
exit();
}
//header('Location: .');
exit();
}
if (isset($_POST['joketext']))
{
$joketext = mysql_real_escape_string($connection, $_POST['joketext']);
$sql = 'INSERT INTO joke SET
joketext="' . $_POST['joketext'] . '",
jokedate=CURDATE()';
if (!mysqli_query($connection, $sql))
{
$error = 'Error adding submitted joke: ' . mysqli_error($connection);
include 'error.html.php';
exit();
}
header('Location: .');
exit();
}
?>
Run Code Online (Sandbox Code Playgroud)
你的问题是这一行(有错误的那一行)
$id = mysql_real_escape_string($connection, $_POST['id']);
Run Code Online (Sandbox Code Playgroud)
相反它应该是
$id = mysqli_real_escape_string($connection, $_POST['id']);
Run Code Online (Sandbox Code Playgroud)
你主要将事物作为mysqli_函数处理(这是更好的方法),但是在这种情况下,你是一个使用mysql_连接来逃脱. 不要使用它,它已被弃用,并且很快将不再起作用,因为它容易受到sql注入的影响.每种语法都有所不同.你有正确的订单设置,但有一个错字(因为其他一切都在使用mysqli.也不要使用魔术报价!危险和弃用
注意,有更好的方法来处理查询,如果你使用预准备语句,你根本不需要转义它(也不需要担心你的变量是否需要引用).这些都是安全的(有些人会说更多,所以你不需要记住逃避所有的变量),并且具有更大的查询速度更快的优势.
例如,见下文.以下是使用delete语句的示例:
首先使用面向对象的样式连接到数据库,如下所示:
$connection = new mysqli("localhost", "user", "password", "database");
Run Code Online (Sandbox Code Playgroud)
(注意最好将数据库变量存储在单独的脚本中,然后将其称为require_once包含)
然后,像这样处理您的查询
$sql = $connection->prepare("DELETE FROM joke WHERE id=?");
$sql->bind_param("i", $id);
$sql->execute();
$sql->close();
Run Code Online (Sandbox Code Playgroud)
请注意,"i"指定这是一个整数(大多数是ids),但是如果这个变量是一个字符串,你可以调用指定为"s"
有关预准备语句的更多信息mysqli,请查看: mysqli准备语句