我在创建一个json字符串时遇到了麻烦,现在在Android应用程序中使用了几天。我遵循了许多教程,但它从来都不是我需要的东西,我从来没有理解这个JSON的东西,尽管我试过。所以我无法按照我想要的方式修改它。
但这与Logins有关,但我只是想读取行并显示数据。
也许有人可以帮助我并向我解释我必须做些什么才能使它发挥作用。 该文件应该从我的MySQL数据库中的一个表中获取一行,该表与city和country params匹配,并将其作为json字符串返回。
更新 我现在使用PDO_MYSQL扩展并拥有新的.php文件。 但是当我尝试从命令行执行该文件时,我得到以下错误:
致命错误:在第15行的get_data_pdo.php中调用未定义的方法DB_CONNECT_PDO :: prepare()
我的档案:
db_connect_pdo.php:
class DB_CONNECT_PDO {
// constructor
function __construct() {
// connecting to database
$this->connect();
}
// destructor
function __destruct() {
// closing db connection
$this->close();
}
/**
* Function to connect with database
*/
function connect() {
try{
$db = new PDO('mysql:host=127.0.0.1;dbname=mydb;charset=utf8', 'myuser', 'mypass');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch(PDOException $ex) {
echo "An Error occured!";
echo($ex->getMessage());
}
// returing connection cursor
return $db;
}
/**
* Function to close db connection
*/
function close() {
// closing db connection
mysqli_close();
}
}
get_data_pdo.php:
$city = 'Berlin';
$country = 'Germany';
require_once('db_connect_pdo.php');
try{
$db = new DB_CONNECT_PDO();
$con = $db->connect();
$stmt = $db->prepare("SELECT * FROM dbtable WHERE city=? AND country=?");
$stmt->execute(array($city, $country));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(isset($rows)){
echo json_encode($rows);
}else{
echo 'failure';
}
}catch(PDOException $ex) {
echo "An Error occured!";
echo($ex->getMessage());
}
我按照本教程进行连接和SQL查询:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#External_links
答案 0 :(得分:1)
您的$con
变量未在getData.php
中定义。
$sql = ...
$db = new DB_CONNECT();
$con = $db->connect();
$result = ...
重要提示: mysql_connect
自PHP 5.5以来已弃用,已在7.0中删除。我强烈建议不要使用它。你应该查找PDO_MYSQL扩展。
更多相关信息:http://php.net/manual/en/function.mysql-connect.php
您还应该阅读 sql injections 。在查询中使用未转义的用户输入是一个巨大的安全漏洞。 PDO提供预处理语句和参数绑定来处理sql注入。
编辑:正如@tadman指出的那样,还存在混合mysql_*
和mysqli_*
的问题。使用mysql_*
建立连接,mysqli_*
用于执行查询并获取结果。
修改2 :将$stmt = $db->prepare(...);
更改为$stmt = $con->prepare(...);
$db
是DB_CONNECT_PDO
类的一个实例,您可以使用它来准备pdo语句,而必须使用PDO
中创建的DB_CONNECT_PDO::connect
对象。
祝你好运!
答案 1 :(得分:0)
我发现了可能给你带来问题的3件事
文件名为' db_connect.php'预计将返回您的连接对象,但在您的代码中,您正在调用' dbConnect.php'
$ return_arr也未定义尝试解决此问题
您可能不会向getData.php发送帖子请求而您正在等待响应,尝试对城市和国家进行硬编码然后运行您的getData.php。你应该没事的