Лицензионный ключ PHP с удаленным MySQL

#php #mysql

#php #mysql — сервер #mysql

Вопрос:

Я создал базу данных с помощью этой таблицы

     CREATE TABLE IF NOT EXISTS `software` (
  `ID` int(255) NOT NULL AUTO_INCREMENT,
  `CompanyName` varchar(255) NOT NULL,
  `valid` int(1) NOT NULL DEFAULT '0',
  `license` varchar(255) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
  

и сделать licence.php на другом сервере для подключения к удаленному mysql

         <?php
    function connect(){
$dsn = 'mysql:dbname=NAME;host=xx.xx.xx.xx';
$user = 'USER';
$password = 'PASS';
try {
    $dbh = new PDO($dsn, $user, $password);
    // run query
    $license = "test";
    $sth = $dbh->prepare("SELECT * FROM software WHERE license='$license' AND valid='1'");
    $sth->execute();
    $result = $sth->fetchAll();
    if ($sth->rowCount() < 1) {
        die("Your License Has Expired!");
    }
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
}
    ?>
  

Обновление: ничего не произошло!! просто пустая страница в обоих направлениях (допустимо = 0) или (допустимо = 1)

В чем же проблема?

Комментарии:

1. $sth = $dbh = кому $sth = $dbh->prepare ?

2. вы завершаете работу функции connect в строке 11, переместите ее } непосредственно перед ?> вызовом метода или просто удалите весь метод вместе

3. Вы тоже никуда не звоните connect() ?

Ответ №1:

Ваша проблема в том, что вы определяете connect() функцию, а не вызываете ее. Это похоже на избыточное кодирование, которое вы продолжаете.

Вы должны просто запустить что-то вроде этого:

 $dsn = 'mysql:dbname=NAME;host=xx.xx.xx.xx';
$user = 'USER';
$password = 'PASS';
try {
    $dbh = new PDO($dsn, $user, $password);
    // run query
    $license = "test";
    $sth = $dbh->prepare("SELECT * FROM software WHERE license='$license' AND valid='1'");
    $sth->execute();
    $result = $sth->fetchAll();
    if ($sth->rowCount() < 1) {
        die("Your License Has Expired!");
    }
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
  

Кроме того, вместо того, чтобы делать:

 if (count($result) === 0) {
  

Вы должны использовать собственный PDO rowCount

 if($sth->rowCount() < 1) {....
  

Вышеизложенное проверит, меньше ли количество строк 1 (эффективно 0 )

Комментарии:

1. ошибки нет! но ничего не произошло, и страница пуста!!! я установил допустимую строку в 0 и 1, но в обоих случаях страница пуста

2. я все еще ищу ответ!!

Ответ №2:

Ваша $dbh не существует вне вашей connect() функции. Если вы хотите использовать его снаружи, вы должны вернуть его.

 function connect(){
        $dsn = 'mysql:dbname=NAME;host=xx.xx.xx.xx';
        $user = 'USER';
        $password = 'PASS';    
        try {
            $dbh = new PDO($dsn, $user, $password);
        } catch (PDOException $e) {
            echo 'Connection failed: ' . $e->getMessage();
            return false;
        }
        return $dbh;
}
  

Ответ №3:

В вашей connect() функции,

$sth = $dbh = ( вероятно, должен быть $sth = $dbh->prepare(

Комментарии:

1. не могли бы вы дать мне завершенный код? ты это серьезно?

2. я добавляю это $sth = $dbh-> prepare(«ВЫБРАТЬ * ИЗ программного обеспечения, ГДЕ лицензия =’$license’ И valid=’1′»); но эта ошибка: Неустранимая ошибка: вызов функции-члена prepare() для не-объекта в /home/travia22/public_html/test/agb.php в строке 13