#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