2012-02-07 37 views
0

我想第一次使用mysqli,因爲我在一個php文件中有多個Query的問題。爲開始即時通訊只是試圖從存儲過程中檢索數據並打印它。但它看起來像代碼被卡在某處打印'succesfull本地主機',但它永遠不會到它下面的代碼。數據永遠不會打印失敗。錯誤的執行mysqli?

<?php 
$link = mysqli_init(); 
if (!$link) { 
    die('mysqli_init failed'); 
} 

if (!mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) { 
    die('Setting MYSQLI_INIT_COMMAND failed'); 
} 

if (!mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) { 
    die('Setting MYSQLI_OPT_CONNECT_TIMEOUT failed'); 
} 

if (!mysqli_real_connect($link, 'localhost', 'root', '', 'fabiola')) { 
    die('Connect Error (' . mysqli_connect_errno() . ') ' 
      . mysqli_connect_error()); 
} 

echo 'Success... ' . mysqli_get_host_info($link) . "\n"; 


//require 'header.php'; 

$resID = mysqli_real_escape_string($_REQUEST['resID']); 
$materialen_id = mysqli_real_escape_string($_REQUEST['materialen_id']); 
$aantal = mysqli_real_escape_string($_REQUEST['aantal']); 
$effectief_gebruikt = mysqli_real_escape_string($_REQUEST['effectief_gebruikt']); 
$opmerking = mysqli_real_escape_string($_REQUEST['opmerking']); 
$datum_van = $_REQUEST['datum_van']; 
$datum_tot = $_REQUEST['datum_tot']; 


$sqm = "CALL aantal_besch_mat_van_tot($datum_van,$datum_tot,$materialen_id,$resID)"; 
//$result = $mysqli->query($sqm) or die('Query Failed!'); 

/* Select queries return a resultset */ 
if ($result = $mysqli->query($sqm)) { 
    printf("Select returned %d rows.\n", mysqli_num_rows($result)); 
    /* free result set */ 
    mysqli_free_result($result); 
}else{ 
    echo 'failed'; 
} 


mysqli_close($link); 

?>

+0

也許我沒有看到它,但是......'回聲'成功...'。 mysqli_get_host_info($ link)。 「\ n」;''是你輸出的唯一東西(如果沒有錯誤)。那麼你期待什麼? – pduersteler 2012-02-07 10:04:28

+2

嘗試首先調用error_reporting(E_ALL)來啓用所有警告和通知;在你的php代碼的開始處。 – heximal 2012-02-07 10:07:47

+0

我試圖打印printf(「選擇返回的%d行。\ n」,mysqli_num_rows($ result)); – 2012-02-07 10:14:52

回答

1

哪裏是$ mysqli的設定或初始化?

應該是這樣的:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

,但我無法看到它。

順便說一句,你是混淆函數調用約定'mysqli_real_escape_string(...)'與面向對象的函數'$ mysqli->查詢(...)'奇怪,我不知道它是安全的做兩個。

另外,使用MySQLi準備好的語句,您將爲自己節省很多心痛,而不是試圖讓所有的輸入安全地手工完成。

$query = "CALL aantal_besch_mat_van_tot(?, ?, ?, ?);"; 
$statement = $mysqli->prepareStatement($query); 
$statement->bind_param('iiii', $datum_van, $datum_tot, $materialen_id, $resID); 
$statement->execute(); 
//get the results. 
$statement->close(); 
$mysqli->close(); 

它只是變得更輕鬆,更安全的使用準備好的語句(在性能百分之幾的成本),真的是你應該總是使用它們。