摘要:坑一報(bào)的第一個(gè)錯(cuò)誤是關(guān)于的這個(gè)報(bào)錯(cuò)字面意思是這個(gè)函數(shù)的參數(shù)應(yīng)該接受一個(gè)的參數(shù),但實(shí)際運(yùn)行時(shí),傳進(jìn)去的參數(shù)是一個(gè)布爾值。在我的代碼中,是查詢后的結(jié)果,我的代碼應(yīng)該看起來(lái)沒(méi)有問(wèn)題,而錯(cuò)誤提示是一個(gè)布爾值,可能是我的查詢語(yǔ)句出現(xiàn)了問(wèn)題。
php發(fā)送Sql語(yǔ)句遇到的坑
標(biāo)簽: php
先在這里貼一下代碼:
返回登陸頁(yè)面"; } }else{ echo "用戶不存在"; //echo "返回登陸頁(yè)面"; } ?>
作為一個(gè)php小白,寫(xiě)了40行代碼,挖了不少坑,大家可以借助一下這段代碼檢驗(yàn)一下自己的水平,哈哈哈哈哈。
下面講述的步驟,是我在逐漸解決的過(guò)程。
報(bào)的第一個(gè)錯(cuò)誤是關(guān)于mysql_num_rows()的
mysql_num_rows() expects mysqli_result 1 to be resource,boolean given
這個(gè)報(bào)錯(cuò)字面意思是這個(gè)函數(shù)的參數(shù)應(yīng)該接受一個(gè)resource的參數(shù),但實(shí)際運(yùn)行時(shí),傳進(jìn)去的參數(shù)是一個(gè)布爾值。
作為一個(gè)學(xué)習(xí)的心態(tài),還是應(yīng)該先找一下關(guān)于這個(gè)函數(shù)的解釋?zhuān)?/p>
用法:int mysql_num_rows ( resource $result )
mysql_num_rows() 返回結(jié)果集中行的數(shù)目。此命令僅對(duì) SELECT 語(yǔ)句有效。要取得被 INSERT,UPDATE 或者 DELETE 查詢所影響到的行的數(shù)目,用 mysql_affected_rows()。
在我的代碼中,$result是查詢后的結(jié)果,我的代碼應(yīng)該看起來(lái)沒(méi)有問(wèn)題,而錯(cuò)誤提示$result是一個(gè)布爾值,可能是我的查詢語(yǔ)句出現(xiàn)了問(wèn)題。
坑二:發(fā)送sql語(yǔ)句現(xiàn)在php菜鳥(niǎo)教程中找了其返回值的情況:
針對(duì)成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查詢,將返回一個(gè) mysqli_result 對(duì)象。針對(duì)其他成功的查詢,將返回 TRUE。如果失敗,則返回 FALSE
看到這里,看到mysqli_result對(duì)象感覺(jué)看到了家人。覺(jué)得頓時(shí)有了頭緒。
關(guān)于$link:
我在mysqli_query()中傳入的參數(shù)$link其實(shí)是不對(duì)的,這個(gè)資源標(biāo)識(shí)符是我登錄數(shù)據(jù)庫(kù)時(shí)候返回的,而不是選擇數(shù)據(jù)時(shí)候返回的。而數(shù)據(jù)庫(kù)才是我操作的對(duì)象,其中的邏輯千萬(wàn)要搞明白。
最后的問(wèn)題就是出在了這里。
先說(shuō)一下php里的變量解析:
在單引號(hào)字符串中的變量和特殊含義的字符將不會(huì)被替換。
用雙引號(hào)定義的 字符串 最重要的特征是變量會(huì)被解析
第一種情況:
$name = "lan"; echo "我是$name";
這在情況下,變量會(huì)被當(dāng)作字符串處理,會(huì)輸出
我是$name
$name = "lan"; echo "我是$name";
在這種情況下,變量會(huì)被解析,輸出:
我是lan
詳情參見(jiàn)玩轉(zhuǎn)php變量解析
php中的{}
在我查找php拼接字符串的過(guò)程中,主要出現(xiàn)了兩種方法,一個(gè)就是直接使用雙引號(hào)進(jìn)行變量解析,另外一種是使用.符號(hào)進(jìn)行拼接。
雙引號(hào)出現(xiàn)了一種寫(xiě)法:{$username} 讓我有一些困惑,在這里也說(shuō)一下其作用:
(1). 表示{}里面的是一個(gè)變量 ,執(zhí)行時(shí)按照變量來(lái)處理
(2). 在字符串中引用變量使用的特殊包括方式,這樣就可以不使用.運(yùn)算符,從而減少代碼的輸入量了
(3). 防止變量名和后面的字符串連在一起
使用.拼接sql語(yǔ)句
這是我在mysql的phpMyAdmin中自動(dòng)生成的查詢語(yǔ)句
SELECT * FROM `user` WHERE `userName` LIKE "lan"
而這是我在運(yùn)行的過(guò)程中輸出的拼接后的字符串:
SELECT * FROM `user` WHERE `userName` LIKE lan
仔細(xì)一下觀察一下可以看出輸出的語(yǔ)句中最后lan是沒(méi)有單引號(hào)的,這就是錯(cuò)誤的根源了,可憐我一直沒(méi)有看到。
最后拼接成了這個(gè)樣子:
$check_query = "SELECT * FROM `user` WHERE `userName` LIKE".""".$username.""";坑四:md5
md5() 函數(shù)計(jì)算字符串的 MD5 散列。主要用于加密.
調(diào)試到后面,前面的都能正確運(yùn)行,但就是一直輸出密碼不對(duì),想到,也許從數(shù)據(jù)庫(kù)里讀取的數(shù)據(jù),也要進(jìn)行md5處理才能和進(jìn)過(guò)md5處理的密碼比較,一試,果然對(duì)了。
其實(shí)可以在一開(kāi)始注冊(cè)的時(shí)候,就把密碼md5加密儲(chǔ)存在數(shù)據(jù)中。
是時(shí)候好好看看調(diào)試方法了
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21829.html
摘要:文件夾中的文件首字母大寫(xiě)。因?yàn)樵谥形覜](méi)有找到日期和字符串轉(zhuǎn)換和格式化的靈活方法,所以在中處理格式化的問(wèn)題。獲取參數(shù)由于框架自身設(shè)計(jì)的問(wèn)題,推薦盡量用方式請(qǐng)求后臺(tái)服務(wù),參數(shù)格式為格式。 1.controllers文件夾中的controller文件首字母大寫(xiě)。不大寫(xiě)也可以,但是環(huán)境兼容性不好,舉個(gè)例子,我開(kāi)發(fā)環(huán)境在mac電腦上,文件名首字母小寫(xiě),服務(wù)可以正常訪問(wèn);但是在阿里云服務(wù)器(deb...
摘要:注入注入是一種惡意攻擊,用戶利用在表單字段輸入語(yǔ)句的方式來(lái)影響正常的執(zhí)行。防范方式是針對(duì)非法的代碼包括單雙引號(hào)等,使用函數(shù)。如許多函數(shù),如可以包含或文件名防范方式過(guò)濾用戶輸入在中設(shè)置禁用和。這將禁用的遠(yuǎn)程文件。 SQL注入 SQL注入是一種惡意攻擊,用戶利用在表單字段輸入SQL語(yǔ)句的方式來(lái)影響正常的SQL執(zhí)行。 防范方式 使用mysql_real_escape_string(),或者...
摘要:肖鵬微博數(shù)據(jù)庫(kù)那些事兒肖鵬,微博研發(fā)中心技術(shù)經(jīng)理,主要負(fù)責(zé)微博數(shù)據(jù)庫(kù)相關(guān)的業(yè)務(wù)保障性能優(yōu)化架構(gòu)設(shè)計(jì),以及周邊的自動(dòng)化系統(tǒng)建設(shè)。經(jīng)歷了微博數(shù)據(jù)庫(kù)各個(gè)階段的架構(gòu)改造,包括服務(wù)保障及體系建設(shè)微博多機(jī)房部署微博平臺(tái)化改造等項(xiàng)目。 showImg(https://segmentfault.com/img/bV24Gs?w=900&h=385); 對(duì)于手握數(shù)據(jù)庫(kù)的開(kāi)發(fā)人員來(lái)說(shuō),沒(méi)有誤刪過(guò)庫(kù)的人生是...
閱讀 1281·2021-11-17 09:33
閱讀 1753·2021-09-09 11:53
閱讀 3230·2021-09-04 16:45
閱讀 1407·2021-08-17 10:12
閱讀 2399·2019-08-30 15:55
閱讀 1784·2019-08-30 15:53
閱讀 2415·2019-08-30 15:52
閱讀 2564·2019-08-29 18:41