注册系统调用成员函数查询错误

时间:2019-06-07 04:20:39

标签: php html mysqli

我对使用php和mysqli还是有点陌生​​,但是使用此代码,我遇到了几个不同的错误,每次我修复一个错误时,都会弹出另一个错误。起初我以为是因为我使用的是过时的系统,但很快意识到我正在使用的某些代码实际上来自较旧的版本...我已经进行了搜索和搜索,但是它给我的唯一问题是使用->由于某种原因,也许还有其他选择吗?还是我只是疯了...

我尝试更新服务器,将mysql更改为mysqli,将PHP更新为当前版本,在整个网络和youtube上进行搜索,以了解其他人是如何做到的以及遇到了什么错误

//app.js
var express = require('express');
var homeRouter= require('./routes/home');
var i18n = require("i18n");
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

i18n.configure({
locales:['en', 'zh'],
directory: __dirname + '/locales',
objectNotation: true
});
app.use(i18n.init);
app.use('/:lang', homeRouter);

//home.js
var express = require('express');
var router = express.Router();
var i18n = require('i18n');
router.get('/', function (req, res) {
  i18n.setLocale(req,req.baseUrl.split('/')[1]);
  res.render("index.ejs", {i18n: res}) 
}
//index.ejs
<div>
 <h1><%=i18n.__("Welcome")%></h1> // working fine in templates
 <my-element translate="<%=i18n%>"> // passing the response of translation to component
 </my-element> 
</div>


//en.json
{
  "Welcome": "Hi , Welcome to my site",
  "list": "Discover the List of Travelling Cities"
}

//myElement.js

import { LitElement, html, css
} from "https://unpkg.com/@polymer/lit-element/lit-element.js?module";
export class Element extends LitElement {

  static get properties() {
    return {
       translate: {type: Object}
    }
 constructor() {
    super();
}

render(){
  <p>${this.translate.list}</p> // not displaying components
} 
}

期望它将数据添加到PHPmyadmin。将从数据库中提取数据,例如登录,但不会添加数据。

  

错误消息:   致命错误:未捕获错误:对C:\ xampp \ htdocs \ myfiles \ Visual Studio Code JavaScript \ PHP Blog Code \ includes \ signup.inc.php:18中的字符串的成员函数query()进行调用:堆栈跟踪:#0 { main}放在第18行的C:\ xampp \ htdocs \ myfiles \ Visual Studio代码JavaScript \ PHP Blog代码\ includes \ signup.inc.php中

1 个答案:

答案 0 :(得分:0)

起初,您将变量$mysqli用于MySQLi数据库连接实例化,但随后使用表示查询本身的字符串覆盖它:

$mysqli = new mysqli ('localhost', 'root', '', 'jordansworld');
$mysqli = "INSERT INTO user ( first, last, email, uid, pwd )

自然地,您的字符串不包含名为query()的方法。

要解决此问题,只需将第二个声明替换为新的变量名,例如$query,然后在->query()内部引用此变量,如下所示:

$query = "INSERT INTO user ( first, last, email, uid, pwd ) VALUES ( '{$mysqli->real_escape_string($_POST['first'])}' , ' {$mysqli->real_escape_string($_POST['last'])}' , '{$mysqli->real_escape_string($_POST['email'])}' , '{$mysqli->real_escape_string($_POST['uid'])}' , '{$mysqli->real_escape_string($_POST['pwd'])}'";
$insert = $mysqli->query($query);

但是请注意,mysqli_real_escape_string()not sufficient以防止SQL注入,相反,您应该转而使用 prepared statements