【问题标题】:Connecting to Database with Msqli API使用 Msqli API 连接到数据库
【发布时间】:2018-05-07 09:20:49
【问题描述】:

帮我调整这个脚本。 我认为与数据库的连接是用 MySQL 编写的,我尝试使用与 MySQLi 的差异连接,但连接后我似乎在代码中遗漏了一些东西。任何帮助将不胜感激。 PHP代码是:

//my config
   $servername = "localhost";
   $username = "root";
   $password = "";
   $databasename = "subscribe";


   $conn = new mysqli($servername, $username, $password, $databasename);
   if ($conn->connect_error) {
   die("Connection failed: " . $conn->connect_error);
   }
   echo "done!!";


$subscribe = (isset($_POST['action']) && $_POST['action'] ==    
'unsubscribe')?false:true;

if ($subscribe){
$fields = array(
    array('name' => 'email', 'valid' => array('require', 'email')),
    array('name' => 'name', 'valid' => array('require')),
);
}else{
$fields = array(
    array('name' => 'unsubscribe_email', 'valid' => array('require',  
'email')),
    array('name' => 'confirm', 'valid' => array('require'), 'err_message'
=> 'confirm'),
);
}

以上是我在mysqli中做的连接。 现在下面的行是脚本的另一部分,我确信我仍然缺少使它工作的东西。这是我从网上得到的一个旧订阅脚本。

$error_fields = array();
$get = array();
foreach ($fields AS $field){
$value = isset($_POST[$field['name']])?$_POST[$field['name']]:'';
if (is_array($value)){
    $value = implode('/ ', $value);
}
if (get_magic_quotes_gpc()){
    $value = stripslashes($value);
}
$get[$field['name']] = mysqli_real_escape_string($value);
$is_valid = true;
$err_message = '';
if (!empty($field['valid'])){
    foreach ($field['valid'] AS $valid) {
        switch ($valid) {
            case 'require':
                $is_valid = $is_valid && strlen($value) > 0;
                $err_message = 'Field required';
                break;
            case 'email':
                $is_valid = $is_valid && preg_match("/^[_a-z0-9-]+(\.[_a-
   z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $value);
                $err_message = 'Email required';
                break;
            default:                
                break;
        }
    }
   }
   if (!$is_valid){
    if (!empty($field['err_message'])){
        $err_message = $field['err_message'];
    }
    $error_fields[] = array('name' => $field['name'], 'message' =>    
 $err_message);
 }
}

if (empty($error_fields)){
if ($subscribe){
    $data = array(
        'email' => "'".$get['email']."'",
        'name' => "'".$get['name']."'",
        'date_subscribe' => 'NOW()',
        'status' => "'T'",
    );
    $sql = "REPLACE INTO subscription_form (`".implode("`, `",    
 array_keys($data))."`) VALUES(".implode(", ", array_values($data)).")";
 }else{
    $sql = "UPDATE subscription_form SET date_unsubscribe = NOW(), status
 = 'F' WHERE email = '".$get['unsubscribe_email']."'";
}
if (!empty($sql)){
    $sql_result = mysqli_query ($sql, $connection ) or die ('request  
"Could not execute SQL query" '.$sql);
}
echo (json_encode(array('code' => 'success')));
}else{
echo json_encode(array('code' => 'failed', 'fields' => $error_fields));
}

很抱歉,我有点急于求成,因为我相信我会逐渐到达那里,但我只需要这样做来完成我正在开发的一些 pho 网站。任何帮助将不胜感激。我需要的只是一点方向,同时我继续阅读更多内容以提高我在 php 和数据库方面的技能。我对 php 和后端只有大约 1/4。

【问题讨论】:

  • 您的问题到底是什么?运行代码后您是否遇到任何错误?
  • 首先您使用的是 $connection 而不是 $conn。第二个mysqli想要先连接,然后再查询。所以不是 $sql_result = mysqli_query ($sql, $connection ) 而是 $sql_result = mysqli_query ($conn, $sql)
  • 顺便说一句,我在这个问题中看不到任何 PDO..

标签: php database mysqli pdo


【解决方案1】:

请检查下面这行,你使用的连接字符串是$connection,应该是$conn

$sql_result = mysqli_query ($sql, $connection )

所以把上面的语句改成 $sql_result = mysqli_query ($sql, $conn) 它应该可以解决您的问题

【讨论】:

  • 也值得检查参数的顺序。
【解决方案2】:

对于代码的第一部分,我认为您必须编写 if..else 块 如下所示

if ($subscribe === true){
  echo 'In IF BLOCK<br />';
  $fields = array(
  array('name' => 'email', 'valid' => array('require', 'email')),
   array('name' => 'name', 'valid' => array('require')),
 );

 }else if($subscribe === false){
   echo 'In the ELSE BLOCK <br />';
    $fields = array(
         array('name' => 'unsubscribe_email', 'valid' => array('require',  
         'email')),
         array('name' => 'confirm', 'valid' => array('require'), 
            'err_message' => 'confirm'),
           );

 } else{
    echo 'This else block i have written for clearification only';
}

================================================ ==============

IN SHORT ifelse if 必须包含评估的 条件

if(condition1_for_evalute){

 } elseif(condition2_for_evalute){

 } else{

 }

第二个代码块我没有得到你想问的。对此感到抱歉

【讨论】:

  • 发布的if条件OP没有错。这是完全有效的
  • 感谢大家的努力,我提出了建议,表单无法提交,可能是xampp问题。我会将它加载到实时服务器上并运行它,看看会发生什么。并感谢您的建议。它是 php jabbers 的免费表格,我尝试更新它。phpjabbers.com/free-subscription-form-script
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2015-01-24
  • 2021-03-21
  • 2016-04-02
  • 2011-09-13
相关资源
最近更新 更多