簡體   English   中英

奇怪的PHP字符串錯誤

[英]Strange PHP string error

這是一個非常奇怪的錯誤,它隨機發生。 因此,我將盡力解釋這一點。 我正在嘗試大幅減少代碼以查明問題,而不必引用框架,也無需在框架外處理500行代碼-因此,我將嘗試返回並更新此問題。 好的,我們開始。

所以基本上說我正在像這樣在函數和preg_replace中使用字符串:

$table = '/something';
print $table;
$table = preg_replace("@^(/)@",'prefix_',$table);
print $table;

輸出看起來像

...
/something - prefix_something
/something - prefix_something
/something - /something

You have an error in you sql query... blah blah somewhere around SELECT * FROM /something

發生的事情是,在滾動代碼之后,這只是停止工作,並且sql錯誤消失了。 更為奇怪的是,如果我開始注釋掉函數外的代碼,那么它將起作用。 我把代碼放回去,它壞了。

我嘗試通過substr($var,0,1)和var_dumping變量重新編碼。 幾輪后,即使$ var實際上是一個字符串,它也會返回bool(false)值。 非常非常奇怪。 有人遇到過嗎? 這是PHP錯誤嗎? 在我看來。

-編輯-

例:

foreach ( $user as $id => $user ) {
  get_data("/table_name","*", "user_id = '$id'");
}


#in the function $_table_ holds "/table_name"
    $_table_ = trim($_table_);
    $tmp = explode(',', $_table_);
    $tables = array();
    foreach ($tmp as $c => $n) {
        $n = trim($n);
        $a = substr($n, 0, 1);
        $b = substr($n, 1);
        if ($a == false) {
            var_dump($n);
            $a = substr($n, 0, 1);
            var_dump($b);
            var_dump($a);
        }
        if ($a == '/') { etc...

輸出:

string(11) "/table_name" string(10) "table_name" bool(false)

如果我切換到原始的preg_replace功能,那么它根本就不會preg_replace,並且會發生相同的情況,即返回“ / table_name”,而不是“ prefix_table_name”,並且這是隨機發生的。 這意味着,如果我在看似無關的函數之外注釋掉代碼,它將對斷斷續續的字符串起作用。

- 解決方案 ----

我發現這與導致此奇怪錯誤的另一個函數中的字符串到數組轉換有關。

基本上,一個函數期望一個nullarray()值,而是傳遞了一個數字。 我們已關閉通知,因此我將它們打開並開始修復所有通知和警告,這就是我發現此奇怪錯誤的方法。 現在,確切地講,造成問題的內部原因是什么,對我來說還是未知的。 但是,我可以將症狀定義為字符串分配問題,該問題將在代碼中的其他位置發生,當我們不使用新的preg_replace值重新分配$ table變量時,該問題將在上面捕獲,上面已詳細介紹。 現在你知道了。 該函數看起來類似於以下內容:

function format_something($one, $two, $three = array()){
    if ($three['something'] == 'Y') {
    /** etc... */
}
...
format_something('one','two',3);

循環一段時間后,這種類型的轉換開始在代碼中隨機出現問題。

substr並不總是返回字符串。 如果找不到子字符串,則返回false。

返回值

返回提取的字符串部分,如果失敗或為空字符串,則返回FALSE。

您應該測試這種情況,然后在搜索到的字符串中var_dump以查看其包含的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM