PHP MySQL数据库记录更新错误与内爆值


PHP MySQL database record updation error with imploded values

好吧,我知道有一大堆关于类似主题的问题,但没有一个对我有帮助。所以我把这个问题用我自己的话汇编在下面。

假设我有一个巨大的国家复选框列表,如下所示:

<tr>
                <th class="left-align">Target Country</th>
                <td class="left-align">
                  <div class="widget-content" style="overflow:auto; height:100px; background:#FFFFFF;border: 1px solid #ddd;border-radius: 3px;">
                    <input type="checkbox" name="country[]" value="Afghanistan" class="checkall2" checked />
                    Afghanistan<br />
                    <input type="checkbox" name="country[]" value="Aland Islands" class="checkall2" checked />
                    Aland Islands<br />
                    <input type="checkbox" name="country[]" value="Albania" class="checkall2" checked />
                    Albania<br />
                    <input type="checkbox" name="country[]" value="Algeria" class="checkall2" checked />
                    Algeria<br />
                    <input type="checkbox" name="country[]" value="American Samoa" class="checkall2" checked />
                    American Samoa<br />
                    <input type="checkbox" name="country[]" value="Andorra" class="checkall2" checked />
                    Andorra<br />
                    <input type="checkbox" name="country[]" value="Angola" class="checkall2" checked />
                    Angola<br />
                    <input type="checkbox" name="country[]" value="Anguilla" class="checkall2" checked />
                    Anguilla<br />
                    <input type="checkbox" name="country[]" value="Antarctica" class="checkall2" checked />
                    Antarctica<br />
                    <input type="checkbox" name="country[]" value="Antigua and Barbuda" class="checkall2" checked />
                    Antigua and Barbuda<br />
                    <input type="checkbox" name="country[]" value="Argentina" class="checkall2" checked />
                    Argentina<br />
                    <input type="checkbox" name="country[]" value="Armenia" class="checkall2" checked />
                    Armenia<br />
                    <input type="checkbox" name="country[]" value="Aruba" class="checkall2" checked />
                    Aruba<br />
                    <input type="checkbox" name="country[]" value="Asia-Pacific" class="checkall2" checked />
                    Asia-Pacific<br />
                    <input type="checkbox" name="country[]" value="Australia" class="checkall2" checked />
                    Australia<br />
                    <input type="checkbox" name="country[]" value="Austria" class="checkall2" checked />
                    Austria<br />
                    <input type="checkbox" name="country[]" value="Azerbaijan" class="checkall2" checked />
                    Azerbaijan<br />
                    <input type="checkbox" name="country[]" value="Bahamas" class="checkall2" checked />
                    Bahamas<br />
                    <input type="checkbox" name="country[]" value="Bahrain" class="checkall2" checked />
                    Bahrain<br />
                    <input type="checkbox" name="country[]" value="Bangladesh" class="checkall2" checked />
                    Bangladesh<br />
                    <input type="checkbox" name="country[]" value="Barbados" class="checkall2" checked />
                    Barbados<br />
                    <input type="checkbox" name="country[]" value="Belarus" class="checkall2" checked />
                    Belarus<br />
                    <input type="checkbox" name="country[]" value="Belgium" class="checkall2" checked />
                    Belgium<br />
                    <input type="checkbox" name="country[]" value="Belize" class="checkall2" checked />
                    Belize<br />
                    <input type="checkbox" name="country[]" value="Benin" class="checkall2" checked />
                    Benin<br />
                    <input type="checkbox" name="country[]" value="Bermuda" class="checkall2" checked />
                    Bermuda<br />
                    <input type="checkbox" name="country[]" value="Bhutan" class="checkall2" checked />
                    Bhutan<br />
                    <input type="checkbox" name="country[]" value="Bolivia" class="checkall2" checked />
                    Bolivia<br />
                    <input type="checkbox" name="country[]" value="Bonaire, Sint Eustatius and Saba" class="checkall2" checked />
                    Bonaire, Sint Eustatius and Saba<br />
                    <input type="checkbox" name="country[]" value="Bosnia and Herzegovina" class="checkall2" checked />
                    Bosnia and Herzegovina<br />
                    <input type="checkbox" name="country[]" value="Botswana" class="checkall2" checked />
                    Botswana<br />
                    <input type="checkbox" name="country[]" value="Bouvet Island" class="checkall2" checked />
                    Bouvet Island<br />
                    <input type="checkbox" name="country[]" value="Brazil" class="checkall2" checked />
                    Brazil<br />
                    <input type="checkbox" name="country[]" value="British Indian Ocean Territory" class="checkall2" checked />
                    British Indian Ocean Territory<br />
                    <input type="checkbox" name="country[]" value="Brunei Darussalam" class="checkall2" checked />
                    Brunei Darussalam<br />
                    <input type="checkbox" name="country[]" value="Bulgaria" class="checkall2" checked />
                    Bulgaria<br />
                    <input type="checkbox" name="country[]" value="Burkina Faso" class="checkall2" checked />
                    Burkina Faso<br />
                    <input type="checkbox" name="country[]" value="Burma (Myanmar)" class="checkall2" checked />
                    Burma (Myanmar)<br />
                    <input type="checkbox" name="country[]" value="Burundi" class="checkall2" checked />
                    Burundi<br />
                    <input type="checkbox" name="country[]" value="Cambodia" class="checkall2" checked />
                    Cambodia<br />
                    <input type="checkbox" name="country[]" value="Cameroon" class="checkall2" checked />
                    Cameroon<br />
                    <input type="checkbox" name="country[]" value="Canada" class="checkall2" checked />
                    Canada<br />
                    <input type="checkbox" name="country[]" value="Cape Verde" class="checkall2" checked />
                    Cape Verde<br />
                    <input type="checkbox" name="country[]" value="Cayman Islands" class="checkall2" checked />
                    Cayman Islands<br />
                    <input type="checkbox" name="country[]" value="Central African Republic" class="checkall2" checked />
                    Central African Republic<br />
                    <input type="checkbox" name="country[]" value="Chad" class="checkall2" checked />
                    Chad<br />
                    <input type="checkbox" name="country[]" value="Chile" class="checkall2" checked />
                    Chile<br />
                    <input type="checkbox" name="country[]" value="China" class="checkall2" checked />
                    China<br />
                    <input type="checkbox" name="country[]" value="Christmas Island" class="checkall2" checked />
                    Christmas Island<br />
                    <input type="checkbox" name="country[]" value="Cocos (Keeling) Islands" class="checkall2" checked />
                    Cocos (Keeling) Islands<br />
                    <input type="checkbox" name="country[]" value="Colombia" class="checkall2" checked />
                    Colombia<br />
                    <input type="checkbox" name="country[]" value="Comoros" class="checkall2" checked />
                    Comoros<br />
                    <input type="checkbox" name="country[]" value="Congo" class="checkall2" checked />
                    Congo<br />
                    <input type="checkbox" name="country[]" value="Cook Islands" class="checkall2" checked />
                    Cook Islands<br />
                    <input type="checkbox" name="country[]" value="Costa Rica" class="checkall2" checked />
                    Costa Rica<br />
                    <input type="checkbox" name="country[]" value="Côte d'Ivoire" class="checkall2" checked />
                    Côte d'Ivoire<br />
                    <input type="checkbox" name="country[]" value="Croatia (Hrvatska)" class="checkall2" checked />
                    Croatia (Hrvatska)<br />
                    <input type="checkbox" name="country[]" value="Cuba" class="checkall2" checked />
                    Cuba<br />
                    <input type="checkbox" name="country[]" value="Curaçao" class="checkall2" checked />
                    Curaçao<br />
                    <input type="checkbox" name="country[]" value="Cyprus" class="checkall2" checked />
                    Cyprus<br />
                    <input type="checkbox" name="country[]" value="Czech Republic" class="checkall2" checked />
                    Czech Republic<br />
                    <input type="checkbox" name="country[]" value="Democratic Republic of Congo" class="checkall2" checked />
                    Democratic Republic of Congo<br />
                    <input type="checkbox" name="country[]" value="Denmark" class="checkall2" checked />
                    Denmark<br />
                    <input type="checkbox" name="country[]" value="Djibouti" class="checkall2" checked />
                    Djibouti<br />
                    <input type="checkbox" name="country[]" value="Dominica" class="checkall2" checked />
                    Dominica<br />
                    <input type="checkbox" name="country[]" value="Dominican Republic" class="checkall2" checked />
                    Dominican Republic<br />
                    <input type="checkbox" name="country[]" value="East Timor" class="checkall2" checked />
                    East Timor<br />
                    <input type="checkbox" name="country[]" value="Ecuador" class="checkall2" checked />
                    Ecuador<br />
                    <input type="checkbox" name="country[]" value="Egypt" class="checkall2" checked />
                    Egypt<br />
                    <input type="checkbox" name="country[]" value="El Salvador" class="checkall2" checked />
                    El Salvador<br />
                    <input type="checkbox" name="country[]" value="Equatorial Guinea" class="checkall2" checked />
                    Equatorial Guinea<br />
                    <input type="checkbox" name="country[]" value="Eritrea" class="checkall2" checked />
                    Eritrea<br />
                    <input type="checkbox" name="country[]" value="Estonia" class="checkall2" checked />
                    Estonia<br />
                    <input type="checkbox" name="country[]" value="Ethiopia" class="checkall2" checked />
                    Ethiopia<br />
                    <input type="checkbox" name="country[]" value="Europe" class="checkall2" checked />
                    Europe<br />
                    <input type="checkbox" name="country[]" value="Falkland Islands (Malvinas)" class="checkall2" checked />
                    Falkland Islands (Malvinas)<br />
                    <input type="checkbox" name="country[]" value="Faroe Islands" class="checkall2" checked />
                    Faroe Islands<br />
                    <input type="checkbox" name="country[]" value="Fiji" class="checkall2" checked />
                    Fiji<br />
                    <input type="checkbox" name="country[]" value="Finland" class="checkall2" checked />
                    Finland<br />
                    <input type="checkbox" name="country[]" value="France" class="checkall2" checked />
                    France<br />
                    <input type="checkbox" name="country[]" value="French Guiana" class="checkall2" checked />
                    French Guiana<br />
                    <input type="checkbox" name="country[]" value="French Polynesia" class="checkall2" checked />
                    French Polynesia<br />
                    <input type="checkbox" name="country[]" value="French Southern Territories" class="checkall2" checked />
                    French Southern Territories<br />
                    <input type="checkbox" name="country[]" value="Gabon" class="checkall2" checked />
                    Gabon<br />
                    <input type="checkbox" name="country[]" value="Gambia" class="checkall2" checked />
                    Gambia<br />
                    <input type="checkbox" name="country[]" value="Georgia" class="checkall2" checked />
                    Georgia<br />
                    <input type="checkbox" name="country[]" value="Germany" class="checkall2" checked />
                    Germany<br />
                    <input type="checkbox" name="country[]" value="Ghana" class="checkall2" checked />
                    Ghana<br />
                    <input type="checkbox" name="country[]" value="Gibraltar" class="checkall2" checked />
                    Gibraltar<br />
                    <input type="checkbox" name="country[]" value="Greece" class="checkall2" checked />
                    Greece<br />
                    <input type="checkbox" name="country[]" value="Greenland" class="checkall2" checked />
                    Greenland<br />
                    <input type="checkbox" name="country[]" value="Grenada" class="checkall2" checked />
                    Grenada<br />
                    <input type="checkbox" name="country[]" value="Guadeloupe" class="checkall2" checked />
                    Guadeloupe<br />
                    <input type="checkbox" name="country[]" value="Guam" class="checkall2" checked />
                    Guam<br />
                    <input type="checkbox" name="country[]" value="Guatemala" class="checkall2" checked />
                    Guatemala<br />
                    <input type="checkbox" name="country[]" value="Guernsey" class="checkall2" checked />
                    Guernsey<br />
                    <input type="checkbox" name="country[]" value="Guinea" class="checkall2" checked />
                    Guinea<br />
                    <input type="checkbox" name="country[]" value="Guinea-Bissau" class="checkall2" checked />
                    Guinea-Bissau<br />
                    <input type="checkbox" name="country[]" value="Guyana" class="checkall2" checked />
                    Guyana<br />
                    <input type="checkbox" name="country[]" value="Haiti" class="checkall2" checked />
                    Haiti<br />
                    <input type="checkbox" name="country[]" value="Heard and McDonald Islands" class="checkall2" checked />
                    Heard and McDonald Islands<br />
                    <input type="checkbox" name="country[]" value="Honduras" class="checkall2" checked />
                    Honduras<br />
                    <input type="checkbox" name="country[]" value="Hong Kong" class="checkall2" checked />
                    Hong Kong<br />
                    <input type="checkbox" name="country[]" value="Hungary" class="checkall2" checked />
                    Hungary<br />
                    <input type="checkbox" name="country[]" value="Iceland" class="checkall2" checked />
                    Iceland<br />
                    <input type="checkbox" name="country[]" value="India" class="checkall2" checked />
                    India<br />
                    <input type="checkbox" name="country[]" value="Indonesia" class="checkall2" checked />
                    Indonesia<br />
                    <input type="checkbox" name="country[]" value="Iran" class="checkall2" checked />
                    Iran<br />
                    <input type="checkbox" name="country[]" value="Iraq" class="checkall2" checked />
                    Iraq<br />
                    <input type="checkbox" name="country[]" value="Ireland" class="checkall2" checked />
                    Ireland<br />
                    <input type="checkbox" name="country[]" value="Isle of Man" class="checkall2" checked />
                    Isle of Man<br />
                    <input type="checkbox" name="country[]" value="Israel" class="checkall2" checked />
                    Israel<br />
                    <input type="checkbox" name="country[]" value="Italy" class="checkall2" checked />
                    Italy<br />
                    <input type="checkbox" name="country[]" value="Ivory Coast" class="checkall2" checked />
                    Ivory Coast<br />
                    <input type="checkbox" name="country[]" value="Jamaica" class="checkall2" checked />
                    Jamaica<br />
                    <input type="checkbox" name="country[]" value="Japan" class="checkall2" checked />
                    Japan<br />
                    <input type="checkbox" name="country[]" value="Jersey" class="checkall2" checked />
                    Jersey<br />
                    <input type="checkbox" name="country[]" value="Jordan" class="checkall2" checked />
                    Jordan<br />
                    <input type="checkbox" name="country[]" value="Kazakhstan" class="checkall2" checked />
                    Kazakhstan<br />
                    <input type="checkbox" name="country[]" value="Kenya" class="checkall2" checked />
                    Kenya<br />
                    <input type="checkbox" name="country[]" value="Kiribati" class="checkall2" checked />
                    Kiribati<br />
                    <input type="checkbox" name="country[]" value="Korea (North)" class="checkall2" checked />
                    Korea (North)<br />
                    <input type="checkbox" name="country[]" value="Korea (South)" class="checkall2" checked />
                    Korea (South)<br />
                    <input type="checkbox" name="country[]" value="Kuwait" class="checkall2" checked />
                    Kuwait<br />
                    <input type="checkbox" name="country[]" value="Kyrgyzstan" class="checkall2" checked />
                    Kyrgyzstan<br />
                    <input type="checkbox" name="country[]" value="Laos" class="checkall2" checked />
                    Laos<br />
                    <input type="checkbox" name="country[]" value="Latvia" class="checkall2" checked />
                    Latvia<br />
                    <input type="checkbox" name="country[]" value="Lebanon" class="checkall2" checked />
                    Lebanon<br />
                    <input type="checkbox" name="country[]" value="Lesotho" class="checkall2" checked />
                    Lesotho<br />
                    <input type="checkbox" name="country[]" value="Liberia" class="checkall2" checked />
                    Liberia<br />
                    <input type="checkbox" name="country[]" value="Libya" class="checkall2" checked />
                    Libya<br />
                    <input type="checkbox" name="country[]" value="Liechtenstein" class="checkall2" checked />
                    Liechtenstein<br />
                    <input type="checkbox" name="country[]" value="Lithuania" class="checkall2" checked />
                    Lithuania<br />
                    <input type="checkbox" name="country[]" value="Luxembourg" class="checkall2" checked />
                    Luxembourg<br />
                    <input type="checkbox" name="country[]" value="Macau" class="checkall2" checked />
                    Macau<br />
                    <input type="checkbox" name="country[]" value="Sudan" class="checkall2" checked />
                    Sudan<br />
                    <input type="checkbox" name="country[]" value="Suriname" class="checkall2" checked />
                    Suriname<br />
                    <input type="checkbox" name="country[]" value="Svalbard and Jan Mayen Islands" class="checkall2" checked />
                    Svalbard and Jan Mayen Islands<br />
                    <input type="checkbox" name="country[]" value="Swaziland" class="checkall2" checked />
                    Swaziland<br />
                    <input type="checkbox" name="country[]" value="Sweden" class="checkall2" checked />
                    Sweden<br />
                    <input type="checkbox" name="country[]" value="Switzerland" class="checkall2" checked />
                    Switzerland<br />
                    <input type="checkbox" name="country[]" value="Syria" class="checkall2" checked />
                    Syria<br />
                    <input type="checkbox" name="country[]" value="Taiwan" class="checkall2" checked />
                    Taiwan<br />
                    <input type="checkbox" name="country[]" value="Tajikistan" class="checkall2" checked />
                    Tajikistan<br />
                    <input type="checkbox" name="country[]" value="Tanzania" class="checkall2" checked />
                    Tanzania<br />
                    <input type="checkbox" name="country[]" value="Thailand" class="checkall2" checked />
                    Thailand<br />
                    <input type="checkbox" name="country[]" value="Timor-Leste" class="checkall2" checked />
                    Timor-Leste<br />
                    <input type="checkbox" name="country[]" value="Togo" class="checkall2" checked />
                    Togo<br />
                    <input type="checkbox" name="country[]" value="Tokelau" class="checkall2" checked />
                    Tokelau<br />
                    <input type="checkbox" name="country[]" value="Tonga" class="checkall2" checked />
                    Tonga<br />
                    <input type="checkbox" name="country[]" value="Trinidad and Tobago" class="checkall2" checked />
                    Trinidad and Tobago<br />
                    <input type="checkbox" name="country[]" value="Tunisia" class="checkall2" checked />
                    Tunisia<br />
                    <input type="checkbox" name="country[]" value="Turkey" class="checkall2" checked />
                    Turkey<br />
                    <input type="checkbox" name="country[]" value="Turkmenistan" class="checkall2" checked />
                    Turkmenistan<br />
                    <input type="checkbox" name="country[]" value="Turks and Caicos Islands" class="checkall2" checked />
                    Turks and Caicos Islands<br />
                    <input type="checkbox" name="country[]" value="Tuvalu" class="checkall2" checked />
                    Tuvalu<br />
                    <input type="checkbox" name="country[]" value="Uganda" class="checkall2" checked />
                    Uganda<br />
                    <input type="checkbox" name="country[]" value="Ukraine" class="checkall2" checked />
                    Ukraine<br />
                    <input type="checkbox" name="country[]" value="United Arab Emirates" class="checkall2" checked />
                    United Arab Emirates<br />
                    <input type="checkbox" name="country[]" value="United Kingdom" class="checkall2" checked />
                    United Kingdom<br />
                    <input type="checkbox" name="country[]" value="United States" class="checkall2" checked />
                    United States<br />
                    <input type="checkbox" name="country[]" value="United States Minor Outlying Islands" class="checkall2" checked />
                    United States Minor Outlying Islands<br />
                    <input type="checkbox" name="country[]" value="Uruguay" class="checkall2" checked />
                    Uruguay<br />
                    <input type="checkbox" name="country[]" value="Uzbekistan" class="checkall2" checked />
                    Uzbekistan<br />
                    <input type="checkbox" name="country[]" value="Vanuatu" class="checkall2" checked />
                    Vanuatu<br />
                    <input type="checkbox" name="country[]" value="Vatican City State (Holy See)" class="checkall2" checked />
                    Vatican City State (Holy See)<br />
                    <input type="checkbox" name="country[]" value="Venezuela" class="checkall2" checked />
                    Venezuela<br />
                    <input type="checkbox" name="country[]" value="Viet Nam" class="checkall2" checked />
                    Viet Nam<br />
                    <input type="checkbox" name="country[]" value="Virgin Islands (British)" class="checkall2" checked />
                    Virgin Islands (British)<br />
                    <input type="checkbox" name="country[]" value="Virgin Islands (U.S.)" class="checkall2" checked />
                    Virgin Islands (U.S.)<br />
                    <input type="checkbox" name="country[]" value="Wallis and Futuna Islands" class="checkall2" checked />
                    Wallis and Futuna Islands<br />
                    <input type="checkbox" name="country[]" value="Western Sahara" class="checkall2" checked />
                    Western Sahara<br />
                    <input type="checkbox" name="country[]" value="Yemen" class="checkall2" checked />
                    Yemen<br />
                    <input type="checkbox" name="country[]" value="Yugoslavia" class="checkall2" checked />
                    Yugoslavia<br />
                    <input type="checkbox" name="country[]" value="Zambia" class="checkall2" checked />
                    Zambia<br />
                    <input type="checkbox" name="country[]" value="Zimbabwe" class="checkall2" checked />
                    Zimbabwe<br />
                  </div></td>
                </td>
              </tr>

我将它们内爆在一个变量中,作为逗号分隔的值,然后我尝试将它们插入数据库,如下所示:

<?php 
$country = (!empty($_POST['country']))?$_POST['country']:null;
if(isset($_POST['submit'])){
    $cnt = implode(",", $country);
    $upd = "UPDATE adverts SET ad_country = '$cnt' WHERE ad_id = '".$id."'";
    $upq = $pdo->prepare($upd);
    $upq->execute();
    if($upq){
        echo "Success";
    }else{
        echo "Failed";
    }
}
?>

但是它给出的错误如下:警告:PDOStatement::execute(): in E:'xampp'htdocs'sites'newsite'admin'ad-edit.php on line 92

当我回显$cnt时,我得到这样的值,这很明显

Afghanistan,Aland Islands,Albania,Algeria,American Samoa,Andorra,Angola,Anguilla,Antarctica,Antigua and Barbuda,Argentina,Armenia,Aruba,Asia-Pacific,Australia,Austria,Azerbaijan,Bahamas,Bahrain,Bangladesh,Barbados,Belarus,Belgium,Belize,Benin,Bermuda,Bhutan,Bolivia,Bonaire, Sint Eustatius and Saba,Bosnia and Herzegovina,Botswana,Bouvet Island,Brazil,British Indian Ocean Territory,Brunei Darussalam,Bulgaria,Burkina Faso,Burma (Myanmar),Burundi,Cambodia,Cameroon,Canada,Cape Verde,Cayman Islands,Central African Republic,Chad,Chile,China,Christmas Island,Cocos (Keeling) Islands,Colombia,Comoros,Congo,Cook Islands,Costa Rica,Côte d'Ivoire,Croatia (Hrvatska),Cuba,Curaçao,Cyprus,Czech Republic,Democratic Republic of Congo,Denmark,Djibouti,Dominica,Dominican Republic,East Timor,Ecuador,Egypt,El Salvador,Equatorial Guinea,Eritrea,Estonia,Ethiopia,Europe,Falkland Islands (Malvinas),Faroe Islands,Fiji,Finland,France,French Guiana,French Polynesia,French Southern Territories,Gabon,Gambia,Georgia,Germany,Ghana,Gibraltar,Greece,Greenland,Grenada,Guadeloupe,Guam,Guatemala,Guernsey,Guinea,Guinea-Bissau,Guyana,Haiti,Heard and McDonald Islands,Honduras,Hong Kong,Hungary,Iceland,India

请帮我解决这个错误…

虽然您使用了prepared语句,但您使用它的方式是绝对错误的,因为您在prepare之前将参数插入sql命令中,而没有进行任何转义。另外,不能用'括住字符串参数。

这意味着

1)你的代码容易受到sql注入攻击

2)如果你的国家列表中包含一个国家的'(如Côte d'Ivoire),那么你的sql将是语法错误的。

解决方案:通过绑定参数,以适当的方式使用准备好的语句。

...
$upd = "UPDATE adverts SET ad_country = :countries WHERE ad_id = :id";
$upq = $pdo->prepare($upd);
$upq->bindParam(':countries', $country);
$upq->bindParam(':id', $id);
$upq->execute();
...