php - 给出警告 : mysqli_real_escape_string() expects parameter 1 to be mysqli, 字符串

标签 php html mysqli

我的站点有一个安全区域,我可以在其中添加/更新/删除数据库条目。我正在尝试将脚本从 mysql 更新到 mysqli。除了“更新”部分外,一切正常。当我填写新信息并单击“更新”时,它给了我这个错误:

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, string given in /home3/tarb89/public_html/aususrpg.net/charbase/updated.php on line 19

我不确定这里出了什么问题;我是一个完全的新手,所以我很抱歉。

这是我的 update.php 代码:

<?php
    // Create connection
$con=mysqli_connect("xxx","xxx","xxx","xxx");

// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }


$id = $_GET['id'];

$result = mysqli_query($con,"SELECT * FROM characters WHERE id = '$id'");
$my_array = array($c_z);
extract($my_array);

?>

<form id="FormName" action="../charbase/updated.php" method="post" name="FormName">
<table width="448" border="0" cellspacing="2" cellpadding="0">

<tr>
<td width="150" align="right"><label for="name">Name: </label></td>
<td><input name="name" maxlength="255" type="text" value="<?php echo stripslashes($name) ?>"></td>
</tr>

<tr>
<td colspan="2" align="center">
<input name="" type="submit" value="Update">
<input name="id" type="hidden" value="<?php echo $id ?>">
</td>
</tr>

</table>
</form>

update.php 页面的另一个问题是当它显示表格时,输入应该显示数据库中已经列出的信息;目前,它显示名称字段,但输入部分是空的。它应该显示数据库中已有的名称数据(然后我可以用我想要更新的任何内容替换它。)

这是 updated.php 代码:

<?php
// Create connection
$con=mysqli_connect("xxx","xxx","xxx","xxx");

// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$id = $_POST['id'];

$name = mysqli_real_escape_string(trim($_POST["name"]), $con);

$rsUpdate = mysqli_query($con,"UPDATE characters SET name='$name'
WHERE id='$id'");

if($rsUpdate) { echo "Successfully updated"; } else { die('Invalid query: '.mysql_error()); }
?>

<a href="index.php">Back to index</a>

如有任何帮助,我们将不胜感激。这件事让我发疯。


不同的问题:见上面的 update.php 代码。

当我单击数据库条目旁边的链接(称为“更新信息”)时,它会将我带到 update.php?id=charactersid

目前,它显示一个空的输入表单。我可以输入信息并点击“更新”,它会正确更新。

但是,当我转到 update.php 页面时,我希望它显示输入表单,除了值应该全部等于数据库中已有的值。

例如:

当前显示的内容:

姓名:[空输入框]

我希望它显示什么:

姓名:[数据库中列出的当前姓名]

所以输入的值应该是那个字符的信息;这样当我想更新时,我可以看到已经列为该角色信息的内容,并更改/删除/添加我需要的任何其他内容。

这样更有意义吗?

最佳答案

你正在以相反的方式使用它:

string mysqli_real_escape_string ( mysqli $link , string $escapestr )

所以应该是:

$name = mysqli_real_escape_string($con, trim($_POST["name"]));

来源:http://php.net/mysqli_real_escape_string

由于您使用的是 MySQLi,我建议您只跳入准备好的语句而不是 real_escape,如下所示:

<?php 
// Your database info 
$db_host = 'host'; 
$db_user = 'user'; 
$db_pass = 'pass'; 
$db_name = 'database';

// POST data
$id = $_POST['id'];
$name = trim($_POST["name"]);

$con = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if ($con->connect_error)
{
    die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}

$sql = "UPDATE characters SET name = ? WHERE id = ?"; 
if (!$result = $con->prepare($sql))
{
    die('Query failed: (' . $con->errno . ') ' . $con->error);
}

if (!$result->bind_param('si', $name, $id))
{
    die('Binding parameters failed: (' . $result->errno . ') ' . $result->error);
}

if (!$result->execute())
{
    die('Execute failed: (' . $result->errno . ') ' . $result->error);
}

$result->close();
$con->close();
echo "Successfully updated";
?>
<a href="index.php">Back to index</a>

选择角色名称:

<?php 
// Your database info 
$db_host = 'host'; 
$db_user = 'user'; 
$db_pass = 'pass'; 
$db_name = 'database';

// POST data
$id = $_POST['id'];

$con = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if ($con->connect_error)
{
    die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}

$sql = "SELECT name FROM characters WHERE id = ?";
if (!$result = $con->prepare($sql))
{
    die('Query failed: (' . $con->errno . ') ' . $con->error);
}

if (!$result->bind_param('i', $id))
{
    die('Binding parameters failed: (' . $result->errno . ') ' . $result->error);
}

if (!$result->execute())
{
    die('Execute failed: (' . $result->errno . ') ' . $result->error);
}

$result->store_result();
if ($result->num_rows == 0)
{
    die('No character found...');
}

$result->bind_result($name);
$result->fetch();
$result->close();
$con->close();
echo $name;

关于php - 给出警告 : mysqli_real_escape_string() expects parameter 1 to be mysqli, 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21736844/

相关文章:

php - 参数编号无效,联合选择

php - HTML DOM 解析器 - 获取纯文本

html - 在绝对定位中调整多个 div 的大小

php - 通过 HTML 表单执行查询

php - 自从从 mysql 更新到 mysqli 以来数据库查询被破坏

php - 上传文件最安全的方法是什么?

php - MySQL无法从网络应用程序中删除

javascript - 无法比较 JavaScript 中下拉框和文本字段中的值

javascript - 在 AngularJS 框架范围内的页面加载时调用 Web 服务

php - mysqli_query() 期望参数 1 为 mysqli,给定为 null