Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO查询疑难解答_Php_Mysql - Fatal编程技术网

Php PDO查询疑难解答

Php PDO查询疑难解答,php,mysql,Php,Mysql,我有一个表格,用于收集网站的各种常规设置。我使用JQuery进行了一些验证,然后将数据发布到PHP脚本中进行处理。除了表中的所有字段都填充了NULL而不是实际值之外,所有这些似乎都可以正常工作 我的表只有3列-TblID、SettingName、SettingValue。后者可以为空 代码如下: /* * This first array is a list of all the settings. * The form inputs are named thus, and I want th

我有一个表格,用于收集网站的各种常规设置。我使用JQuery进行了一些验证,然后将数据发布到PHP脚本中进行处理。除了表中的所有字段都填充了
NULL
而不是实际值之外,所有这些似乎都可以正常工作

我的表只有3列-
TblID、SettingName、SettingValue
。后者可以为空

代码如下:

/*
* This first array is a list of all the settings. 
* The form inputs are named thus, and I want the `SettingName` value to 
* also be pulled from this list. 
* For example: 
* input[name="BrowserTitle"] = 'My Site' => 
* $_POST['BrowserTitle'] = 'My Site' => 
* SettingName = BrowserTitle, SettingValue = 'MySite'
*/

$settings_arr = array(
    'BrowserTitle', 'SiteTitle', 'SiteBlurb',
    'SiteEmail', 'SiteAddress', 'SiteMobile', 'SiteLandline', 'SiteFax',
    'SiteSocialFacebookLink', 'SiteSocialYouTubeLink', 'SiteSocialTwitterLink',
    'SiteSEOKeywords', 'SiteSEOBlurb'
);
$settings = join('\',\'',$settings_arr);

//clear old values
$q = $su_gl_conn -> prepare(" DELETE FROM su_settings WHERE SettingName IN ('" . $settings . "') ");
$q               -> execute(); //works so far


//begin insert statement:
$tokens = array();
$sql = "INSERT INTO su_settings ( SettingName, SettingValue ) VALUES ";
foreach($settings_arr as $i => $settingName)
{
    $sql.= "( '" . $settingName . "', :settingValue" . $i . " ),";
    $tokens[':settingValue' . $i] = (!empty($_POST[$settingName])) ? $_POST[$settingName] : NULL;
}
$sql = rtrim($sql, ',');

$q = $su_gl_conn -> prepare($sql);
foreach($tokens as $tokenName => $tokenValue)
{
    $q -> bindParam( $tokenName, $tokenValue, PDO::PARAM_NULL);
}
$q -> execute();
查询没有失败,所有行都被填充-每个
SettingName
都正确地填充了正确的字符串,但是每个
SettingValue
都被设置为
NULL
。但是,如果我回显我的
$tokens
数组,它确实会显示正确映射的输入值:正确的tokenname到正确的值

回显时的实际查询:

INSERT INTO su_settings ( SettingName, SettingValue ) VALUES ( 'BrowserTitle', :settingValue0 ),( 'SiteTitle', :settingValue1 ),( 'SiteBlurb', :settingValue2 ),( 'SiteEmail', :settingValue3 ),( 'SiteAddress', :settingValue4 ),( 'SiteMobile', :settingValue5 ),( 'SiteLandline', :settingValue6 ),( 'SiteFax', :settingValue7 ),( 'SiteSocialFacebookLink', :settingValue8 ),( 'SiteSocialYouTubeLink', :settingValue9 ),( 'SiteSocialTwitterLink', :settingValue10 ),( 'SiteSEOKeywords', :settingValue11 ),( 'SiteSEOBlurb', :settingValue12 )
和令牌数组(只有2个实际值):


在这一点上,我只是需要一双新的眼睛,我不明白为什么它不起作用——它可能是一些小东西。感谢您的帮助

提示:看看和之间的区别。

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggggggggggggggggggggggggg hhhhhhhhhhhhhhhhhh
:settingValue0=My Site:settingValue1=My Site:settingValue2=:settingValue3=:settingValue4=:settingValue5=:settingValue6=:settingValue7=:settingValue8=:settingValue9=:settingValue10=:settingValue11=:settingValue12=