2016-10-01 32 views
-2

我是自學的,我正在努力讓一個工具讓我輸入mysqli函數來實時執行,以幫助我更好地理解他們做什麼。爲什麼我會得到「mysqli_stat()期望參數1爲mysqli」錯誤?

這是我開始的html文件。

<form action="index.php" method="post"> 
<input type="text" placeholder="User Name" name="username"> 
<input type="password" placeholder="Password" name="userpassword"> 
<input type="submit" value="Connect"> 
</form> 

這是連接的php文件,然後請求初始函數。

<?php 
$username = trim($_POST['username']); 
$userpassword = trim($_POST['userpassword']); 
echo $username; 
$conn = mysqli_connect("localhost", $username, $userpassword); 
// Check connection 
if (!$conn) { 
die("Connection failed: " . mysqli_connect_error()); 
} 
echo " connected successfully.<br />"; 
?> 
<form action="action.php" method="post"> 
<input type="hidden" value=$conn name="conn"> 
<input type="text" placeholder="MySQLi Operation" name="operation"> 
<input type="submit" value="Ok"> 
</form> 

最後是應該執行該功能,但給我一個錯誤的PHP文件。我輸入的函數是'mysqli_stat($ conn);'。沒有其他功能似乎也可以工作。

<?php 
$operation = trim($_POST['operation']); 
$conn = trim($_POST['conn']); 
eval($operation); 
?> 
<form action="action.php" method="post"> 
<input type="text" placeholder="MySQLi Operation" name="operation"> 
<input type="submit" value="Ok"> 
</form> 
+0

執行此代碼時'$ conn'的運行時值是什麼?你從表單發送什麼字符串?錯誤(如果你閱讀整條消息)似乎告訴你,你需要的不僅僅是一個字符串的資源對象。 – David

+2

我不知道你在做什麼,但你正在做一些驚人的事情。 –

回答

1

您無法通過表單請求傳遞resource句柄。只有文字(字符串,整數)可以作爲$_POST$_GET變量發送。對象和資源(數據庫,文件I/O句柄)不會。

如果你看一下生成的HTML從你的第二個摘錄你會看到:

<input type="hidden" value=resource id #2 name="conn"> 
           ↑↑↑↑↑↑↑↑↑↑ 

你必須建立和mysqli $conn在你的測試腳本重新。 (對於測試也很好,但不要在生產代碼中使用這樣的結構。)

+0

所以我理解'$ conn = mysqli_connect(「localhost」,$ username,$ userpassword);'創建一個對象。不是一個字符串值的變量?那個對象沒有被傳遞,而是試圖傳遞一個字符串? –

+0

是的。 'echo $ conn'會將資源/句柄變成無用的字符串。哦,我剛剛注意到:你還發送了一個字面的「$ conn''字符串。 - 對於mysqli,你可能會得到一個對象,當試圖打印出來/將它轉換爲字符串時,會導致錯誤信息。 – mario

+0

apc_store和apc_fetch是否是正確的方式,或者至少是傳遞對象的有效方法? –

相關問題