我試圖讓我很容易地使用jquery從php/mysql請求json輸出。現在我正在使用下面的內容。誰能推薦一個更好的方法?php輸出json
/do.php?username=bob
<?php
$str = $_SERVER['QUERY_STRING'];
if($str != ''){
if(preg_match("/username/",$str)){
parse_str($str);
$json = json_encode(checkUserName($username));
echo $json;
}
}
function checkUserName($v){
$db = new DB();
$db->connectDB();
$findUsername = mysql_query("SELECT COUNT(*) FROM user WHERE username = '$v'");
$countUser = mysql_fetch_row($findUsername);
if($countUser[0] < 1){
return array('username' => 'false');
}else{
return array('username' => 'true');
}
$db->disconnectDB();
}
?>
我得到一個乾淨的{ '用戶名': '假'}或{ '用戶名': '真'}這適用於我所需要的;但是PHP有沒有更好的方法來做到這一點?
哇 - 驚人的答案!我甩我的老DB類,取而代之的是:
<?php
function db_connect(){
$dbh = new PDO("mysql:host=localhost;dbname=thisdb", "dbuser", "dbpass");
return ($dbh);
}
?>
然後在我的do.php腳本我做了這個變化:
<?php
if(isset($_GET['username'])){
header('content-type: application/json; charset=UTF-8');
echo json_encode(checkUserName($_GET['username']));
}
function checkUserName($v){
$dbh = db_connect();
$sql = sprintf("SELECT COUNT(*) FROM user WHERE username = '%s'", addslashes($v));
if($count = $dbh->query($sql)){
if($count->fetchColumn() > 0){
return array('username'=>true);
}else{
return array('username'=>false);
}
}
}
?>
和我的jQuery是:
function checkUserName(str){
$.getJSON('actions/do.php?username=' + str, function(data){
var json = data;
if(json.username == true){
// allowed to save username
}else{
// not allowed to save username
}
});
}
'$ db-> disconnectDB();'無法訪問。 – Musa
'DB'類在哪裏? –
請修復SQL注入漏洞 - 請參閱http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php(並且最好切換到使用mysqli_ *或pdo而不是過時的mysql_ *函數)。 –