菜鸟教程小白 发表于 2022-12-13 07:06:44

ios - 无法将 'is not null' 查询传递到服务器端


                                            <p><p><strong>情况</strong></p>

<p>我想从数据库中搜索数据。</p>

<p><strong>我的逻辑</strong></p>

<p>如果我的文本字段长度为零,则将“不为空”值传递给服务器端。否则将文本字段数据传递到服务器端。</p>

<p><strong>客户端:</strong></p>

<pre><code> UILabel *first=[init];
UILabel *sec=[init];

if (_zip.text.length==0) {
    first.text=@&#34;is not null&#34;;
}
else
if (_zip.text.length&gt;0) {
first.text=_zip.text;
}
if (_par.text.length==0) {
sec.text=@&#34;is not null&#34;;
}
else if (_par.text.length&gt;0){
sec.text=_par.text;
}


NSString *selquery=;


NSData *data=];
NSString *str=[initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@&#34;%@&#34;,str);
</code></pre>

<p><strong>服务器端</strong></p>

<pre><code>    &lt;?php

    $host=&#34;localhost&#34;;
    $username=&#34;root&#34;;
    $password=&#34;&#34;;
    $db_name=&#39;BuyAndSell&#39;;
    mysql_connect(&#34;$host&#34;, &#34;$username&#34;, &#34;$password&#34;)or die(&#34;cannot connect&#34;);
    mysql_select_db(&#34;$db_name&#34;)or die(&#34;cannot select DB&#34;);


    $zipcode=$_GET[&#39;zipcode&#39;];
    $parking=$_GET[&#39;parking&#39;];

    $sql=&#34;SELECT * FROM bas WHERE zipcode=&#39;$zipcode&#39; and parking=&#39;$parking&#39;&#34;;

   if ($result = mysql_query($sql)){

   $resultArray = array();
   $tempArray = array();


   while($row = mysql_fetch_object($result)){
    $tempArray = $row;
    array_push($resultArray, $tempArray);
    }


    echo json_encode($resultArray);

    }
    else{

    echo &#34;failed query&#34;;}
    ?&gt;
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>为了做到正确,您需要在服务器端进行。当您的数据到达服务器时,关于 <code>_zip.text.length</code> 为零的关键信息已经消失。服务器只知道 <code>$zipcode</code> 变量设置为字符串 <code>is not null</code>,所以它运行搜索</p>

<pre><code>SELECT * FROM bas WHERE zipcode=&#39;is not null&#39; and parking=&#39;is not null&#39;
</code></pre>

<p>什么都找不到。</p>

<p>将长度检查的代码移至服务器端,并从客户端传递“原始”字符串。然后修改您的 PHP 代码以根据输入构造查询字符串。从基本字符串 <code>"SELECT * FROM bas WHERE"</code> 开始,然后在 <code>$zipcode</code> 为空时附加 <code>zipcode is not null</code> 或比较到 <code>$zipcode</code> 如果它不为空。之后附加 <code>"AND "</code>,并对 <code>$parking</code> 变量执行相同操作。</p>

<p><strong>注意 1:</strong>您的服务器端实现有助于进行简单的 SQL 注入(inject)攻击。引用 <a href="https://stackoverflow.com/q/60174/335858" rel="noreferrer noopener nofollow">this Q&amp;A</a>有关如何通过参数化查询来解决此问题的信息。</p>

<p><strong>注意 2:</strong> 在生产代码中使用 <code>SELECT *</code> 不是一个好习惯。见 <a href="https://stackoverflow.com/q/3639861/335858" rel="noreferrer noopener nofollow">this Q&amp;A</a>了解它的问题所在。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 无法将&#39;is not null&#39; 查询传递到服务器端,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/30214184/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/30214184/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 无法将 &#39;is not null&#39; 查询传递到服务器端