Php mysql\u real\u escape\u string()希望参数1为字符串,对象为给定的
嘿,我是一个PHP新手,在这里设置了一个“fetch,post to db,allow delete”项目,我已经获取了数据,打印了db行,现在我添加了功能,通过Php mysql\u real\u escape\u string()希望参数1为字符串,对象为给定的,php,Php,嘿,我是一个PHP新手,在这里设置了一个“fetch,post to db,allow delete”项目,我已经获取了数据,打印了db行,现在我添加了功能,通过'$id'删除每一行,但我遇到了这个错误 我用astricks突出显示了第81行以及上面和下面的两个注释块,以便您可以轻松找到它 谢谢你帮我学习 <?php // ***** MagicQuoteFix ***** // if (get_magic_quotes_gpc()) { function stripsla
'$id'
删除每一行,但我遇到了这个错误
我用astricks突出显示了第81行以及上面和下面的两个注释块,以便您可以轻松找到它
谢谢你帮我学习
<?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();
}
?>
您正在使用mysqli查询数据库,因此您需要使用
mysqli\u real\u escape\u string()
而不是mysql\u real\u escape\u string()
并删除传递给函数的第一个参数$connection
。这是每个开发人员都会犯的一个非常常见的错误
因此,可以将第81行替换为
$id = mysqli_real_escape_string($_POST['id']);
您正在使用mysqli查询数据库,因此需要使用
mysqli\u real\u escape\u string()
而不是mysql\u real\u escape\u string()
,并删除传递给函数的第一个参数,即$connection
。这是每个开发人员都会犯的一个非常常见的错误
因此,可以将第81行替换为
$id = mysqli_real_escape_string($_POST['id']);
您的问题在于这一行(有错误的那一行) 应该是这样
$id = mysqli_real_escape_string($connection, $_POST['id']);
您主要以mysqli
函数的形式处理事情(这是更好的方式),但是在这种情况下,您使用的是mysql
连接进行转义不要使用此选项,它已被弃用,并且很快将不再工作,因为它容易受到sql注入的攻击每个选项的语法都不同。您的顺序设置正确,但有一个输入错误(因为其他所有内容都在使用mysqli
。另外不要使用魔法引号!危险且不推荐使用
注意,有更好的方法来处理查询,如果您使用预先准备好的语句,您根本不需要转义它(也不需要担心您的变量是否需要引用)。这些方法同样安全(有些人会说得更安全,因此您不必记着转义所有变量),并具有对较大查询速度更快的优势
例如,请参见下面。下面是使用delete语句的示例:
首先使用面向对象的样式连接到数据库,如下所示:
$connection = new mysqli("localhost", "user", "password", "database");
(注意,最好将数据库变量存储在单独的脚本中,然后将其称为require\u once
include)
然后,像这样处理您的查询
$sql = $connection->prepare("DELETE FROM joke WHERE id=?");
$sql->bind_param("i", $id);
$sql->execute();
$sql->close();
请注意,“i”
指定这是一个整数(与大多数ID一样),但是如果此变量是字符串,则可以调用将其指定为“s”
有关
mysqli
prepared语句的更多信息,请查看此处:您的问题在于这一行(出现错误的那一行)
应该是这样
$id = mysqli_real_escape_string($connection, $_POST['id']);
您主要是以mysqli\uu
函数的形式处理事情(哪种方式更好),但是在本例中,您使用的是一个用于转义的mysql\uucode>连接。不要使用此连接,它已被弃用,并且很快将不再工作,因为它容易受到sql注入的攻击。每个连接的语法都不同。您已正确设置顺序,但有一个打字错误(因为其他所有东西都在使用mysqli
。另外不要使用神奇的引号!危险的和不推荐的
注意,有更好的方法来处理查询,如果您使用预先准备好的语句,您根本不需要转义它(也不需要担心您的变量是否需要引用)。这些方法同样安全(有些人会说得更安全,因此您不必记着转义所有变量),并具有对较大查询速度更快的优势
例如,请参见下面。下面是使用delete语句的示例:
首先使用面向对象的样式连接到数据库,如下所示:
$connection = new mysqli("localhost", "user", "password", "database");
(注意,最好将数据库变量存储在单独的脚本中,然后将其称为require\u once
include)
然后,像这样处理您的查询
$sql = $connection->prepare("DELETE FROM joke WHERE id=?");
$sql->bind_param("i", $id);
$sql->execute();
$sql->close();
请注意,“i”
指定这是一个整数(与大多数ID一样),但是如果此变量是字符串,则可以调用将其指定为“s”
有关mysqli
prepared语句的更多信息,请查看此处:类似情况:
请参阅:www.westwoodpavilion/ecommerce/admin_area/login.php(源代码)
这对我很有用……埃洛伊萨……非常感谢。类似情况:
请参阅:www.westwoodpavilion/ecommerce/admin_area/login.php(源代码)
这对我很有用……埃洛伊萨……非常感谢。改变:
if (!ini_get("safe_mode")) $success = mail($to, $subject, $message, $headers, $params);
致:
就像变魔术一样。只要把你的邮件($改成…,剩下的改成
(如上所述)
更改:
if (!ini_get("safe_mode")) $success = mail($to, $subject, $message, $headers, $params);
致:
就像变魔术一样。只要把你的邮件($改成…,剩下的改成
(如上所述)
假设它是mysqli\u real\u escape\u string,为什么要混合使用mysql\u
和mysqli\u
函数?看起来你把错误的参数传递给了mysql\u real\u escape\u string
,但是你应该使用这个函数的mysqli
版本,或者更好的数据绑定。@AlexanderO'Mara是对的。我在这里在<代码> MySQL < /COD>和<代码> myqLII/COD>之间的语法略有不同,不只是<代码> i>代码>。请考虑<代码> mySqLI:/Cord>函数引用。我同意@ AlxyDoR'MARA。我强烈推荐查看mySQL编写的语句。这将有利于您在很多方面,如更好地保护S。QL注入。你一定是在开玩笑。我是新来的,但从我现在读到的评论来看,唯一的区别就是有不同的扩展?我发誓mysql\u real\u escape
是为表单数据提交部分工作的。我不了解mysql