[英]Trying to get MySQL to connect via php into JSON, but returning errors connecting to MySQL from a php script
從本質上講,我試圖打印出信息,JSON,這樣我可以用我的應用程序溝通,但我不能從PHP腳本連接到MySQL數據庫的一些奇怪的原因。 可能是什么引起錯誤:警告:mysql_connect()[function.mysql-connect]:在第13行的/srv/disk11/1158855/www/(myphpwebsite)/lib.php中的查詢過程中,與MySQL服務器的連接丟失了無法連接:查詢期間失去與MySQL服務器的連接。
另外,第13行指示lib.php中的行:
mysql_connect ( $dbhost, $dbuser, $dbpass) or die("Could not connect: ".mysql_error());
還應該注意的是,這是對上一個問題的補充,以防任何人想追蹤源: MySQL問題,使用php連接到站點 。
最后,我從本地主機和使用mysql的遠程服務器上都收到相同的錯誤
lib.php
<?
//Database Information
$dbhost = "31.170.160.76";
$dbname = "testdatabase";
$dbuser = "(personalinformation)";
$dbpass = "tested123";
//Connect to database
mysql_connect ( $dbhost, $dbuser, $dbpass) or die("Could not connect: ".mysql_error());
mysql_select_db($dbname) or die(mysql_error());
//executes a given sql query with the params and returns an array as result
function query() {
global $link;
$debug = false;
//get the sql query
$args = func_get_args();
$sql = array_shift($args);
//secure the input
for ($i=0;$i<count($args);$i++) {
$args[$i] = urldecode($args[$i]);
$args[$i] = mysqli_real_escape_string($link, $args[$i]);
}
//build the final query
$sql = vsprintf($sql, $args);
if ($debug) print $sql;
//execute and fetch the results
$result = mysqli_query($link, $sql);
if (mysqli_errno($link)==0 && $result) {
$rows = array();
if ($result!==true)
while ($d = mysqli_fetch_assoc($result)) {
array_push($rows,$d);
}
//return json
return array('result'=>$rows);
} else {
//error
return array('error'=>'Database error');
}
}
//loads up the source image, resizes it and saves with -thumb in the file name
function thumb($srcFile, $sideInPx) {
$image = imagecreatefromjpeg($srcFile);
$width = imagesx($image);
$height = imagesy($image);
$thumb = imagecreatetruecolor($sideInPx, $sideInPx);
imagecopyresized($thumb,$image,0,0,0,0,$sideInPx,$sideInPx,$width,$height);
imagejpeg($thumb, str_replace(".jpg","-thumb.jpg",$srcFile), 85);
imagedestroy($thumb);
imagedestroy($image);
}
?>
Index.php
<?
session_start();
require("lib.php");
require("api.php");
header("Content-Type: application/json");
switch ($_POST['command']) {
case "login":
login($_POST['username'], $_POST['password']); break;
case "register":
register($_POST['username'], $_POST['password']); break;
}
exit();
?>
api.php
<?php
function errorJson($msg){
print json_encode(array('error'=>$msg));
exit();
}
function register($user, $pass) {
//check if username exists
$login = query("SELECT username FROM login WHERE username='%s' limit 1", $user);
if (count($login['result'])>0) {
errorJson('Username already exists');
//try to register the user
$result = query("INSERT INTO login(username, pass) VALUES('%s','%s')", $user, $pass);
if (!$result['error']) {
//success
login($user, $pass);
} else {
//error
errorJson('Registration failed');
}
}
}
function login($user, $pass) {
$result = query("SELECT IdUser, username FROM login WHERE username='%s' AND pass='%s' limit 1", $user, $pass);
if (count($result['result'])>0) {
//authorized
$_SESSION['IdUser'] = $result['result'][0]['IdUser'];
print json_encode($result);
} else {
//not authorized
errorJson('Authorization failed');
}
}
?>
由於這是在“連接”行上的,因此已找到服務器(否則您將收到不同的消息),但尚未協商登錄。
直接來自手冊 :
很少會在客戶端嘗試與服務器建立初始連接時發生。 在這種情況下,如果將connect_timeout值設置為僅幾秒鍾,則可以將其增加到十秒鍾來解決問題,如果距離很長或連接很慢,則可能會更多。
如果不是這樣,則可能是網絡問題或您的連接在身份驗證過程中被終止。 檢查您的mysql主機沒有某種奇怪的驗證,證明您來自特定的IP(我說怪異的,因為比起終止身份驗證,還有更多標准的管理方法),或者嘗試從更接近MySQL服務器的服務器(就網絡速度而言更接近)。
我弄清楚是怎么回事。 事實證明,我的php代碼越往下與登錄沖突。 這就是為什么它不會在多個遠程MySQL和我自己的Localhost上進行身份驗證的原因
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.