-1

我的链接缩短器出现 MySQL/MySQLi/PHP 错误,错误是:

Fatal error: Call to a member function bind_param() on a non-object in
/home/exabit/public_html/9ui/index.php on line 50

这是有问题的行。

$reslove->bind_param("ss",$link, $short_url);

这是其余的代码

<?php
$data_base = new mysqli ("http://host38.qnop.net/~exab","exab_ml","MKnOz3A]h~aw","exab_ml");
function generateRandomString($length = 3) {
$key = 'abcdefghijklmnopqrstuvwxyz1234567890';
$keyLength = strlen($key);
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $key[rand(0, $keyLength - 1)];
}
return $string;
}
if (isset($_GET['title'])) {
$reslove = $data_base->prepare("SELECT * FROM links WHERE title=?");
$reslove->bind_param("s", $_GET['title']);
$reslove->execute();
$goto = $reslove->get_result()->fetch_array();
$goto1 = $goto[1];
header("Location: $goto1");
}
if (isset($_POST['submit'])) {
$short_url = generateRandomString();
if (!preg_match("/^(http|https):/", $_POST['long_url'])) {
$_POST['long_url'] = 'http://'.$_POST['long_url'];
}
$link = $_POST['long_url'];
$reslove = $data_base->prepare("INSERT INTO links VALUES('',?,?)");
$reslove->bind_param("ss",$link, $short_url);
$reslove->execute();
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<center>
<form>
<p style="color:#05ff19;font-family:Tahoma;font-size:16px;text-align:center">Shortened Link: </p><input id=shortenedurl style="background-color:#000;color:#05ff19;font-family:Tahoma;font-size:16px;vertical-align:middle;border:1px solid #05ff19" type="text" value=<?php echo "9ui.co/$short_url";}?>'>
</form>
</center>

resolve 的拼写错误与此无关。
在此先感谢,
扎克戴维斯

4

2 回答 2

2

错误“在非对象上调用成员函数 bind_param()”意味着它$reslove不是对象,因此您不能在不是对象的东西上调用成员函数(又名方法)。怎么可能$resolve不是对象?好吧,如果在准备 SQL 语句时发生错误->prepare,第 49 行的方法调用将返回,当然,它是一个“非对象”,因此会导致您收到错误消息。falsefalse

查看第 49 行,其中$resolve设置,嗯,SQL 语句看起来很有趣。INSERT 命令的语法通常是...

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

您已经遗漏了(column1,column2,column3,...)明确说明列名及其顺序的内容。如果它确实有效,那么将其排除在外是有风险和/或脆弱的,因为您会假设列与您的值相匹配,但情况可能并非总是如此。明确声明(column1,column2,column3,...).

于 2015-12-26T17:29:58.317 回答
0

改变这个

$reslove->bind_param("ss",$link, $short_url);

$reslove->bind_param($link, $short_url);

更新

在您的准备语句中添加列名,然后给它们一个像这样的值

$reslove = $data_base->prepare("INSERT INTO links (id, link, short_url) VALUES(?,?,?)");
$reslove->bind_param('',$link, $short_url);
于 2015-12-26T18:32:05.000 回答